""" The client code should be able to work with any pre-configured abstraction- implementation combination. """ from structural.bridge.abstractions import Abstraction from structural.bridge.implementations import ( ConcreteImplementationA, ConcreteImplementationB, ) def client_code(abstraction: Abstraction) -> None: """ Except for the initialization phase, where an Abstraction object gets linked with a specific Implementation object, the client code should only depend on the Abstraction class. This way the client code can support any abstraction-implementation combination. """ print(abstraction.operation(), end="") implementation = ConcreteImplementationA() abstraction = Abstraction(implementation) client_code(abstraction) print("\n") implementation = ConcreteImplementationB() abstraction = Abstraction(implementation) client_code(abstraction)