Bridge Design Pattern in Python
""" Decouple an abstraction from its implementation so that the two can vary independently. """ import abc class Abstraction: """ Define the abstraction's interface. Maintain a reference to an object of type Implementor. """ def __init__(self, imp): self._imp = imp def operation(self): self._imp.operation_imp() class Implementor(metaclass=abc.ABCMeta): """ Define the interface for implementation classes. This interface doesn't have to correspond exactly to Abstraction's interface; in fact the two interfaces can be quite different. Typically the Implementor interface provides only primitive operations, and Abstraction defines higher-level operations based on these primitives. """ @abc.abstractmethod def operation_imp(self): pass class ConcreteImplementorA(Implementor): """ Implement the Implementor interface and define its concrete implementation. """ def operation_imp(self): pass class ConcreteImplementorB(Implementor): """ Implement the Implementor interface and define its concrete implementation. """ def operation_imp(self): pass def main(): concrete_implementor_a = ConcreteImplementorA() abstraction = Abstraction(concrete_implementor_a) abstraction.operation() if __name__ == "__main__": main() 