🐲

Bridge

2023/09/10に公開

Bridge パターンは、抽象と実装を分離し、両者を独立して変更できるようにするデザインパターンです。このパターンは、2つの異なる階層の間に橋をかけることで、階層が互いに独立して進化するのを助けます。

主要な構成要素:

  1. Abstraction (抽象): 実装を代表する高レベルのインターフェースや抽象クラス。
  2. RefinedAbstraction (洗練された抽象): Abstractionを拡張する具体的なクラス。
  3. Implementor (実装者): 実際の動作を定義する低レベルのインターフェース。
  4. ConcreteImplementor (具体的な実装者): Implementorの具体的な実装を行うクラス。

例:

デバイスとその操作の実装を考えてみましょう。ここでデバイス(例:ラジオ、テレビ)とその操作(オン、オフ、ボリューム調整など)を独立して拡張したいとします。

  1. Abstraction:

    class Device:
        def __init__(self, implementor):
            self.implementor = implementor
    
        def turn_on(self):
            self.implementor.turn_on()
    
        def turn_off(self):
            self.implementor.turn_off()
    
    
  2. Implementor:

    class DeviceImplementor(ABC):
        @abstractmethod
        def turn_on(self):
            pass
    
        @abstractmethod
        def turn_off(self):
            pass
    
    
  3. ConcreteImplementor:

    class RadioImplementor(DeviceImplementor):
        def turn_on(self):
            print("ラジオをオンにします。")
    
        def turn_off(self):
            print("ラジオをオフにします。")
    
    class TVImplementor(DeviceImplementor):
        def turn_on(self):
            print("テレビをオンにします。")
    
        def turn_off(self):
            print("テレビをオフにします。")
    
    

使用方法:

    radio = Device(RadioImplementor())
    tv = Device(TVImplementor())

    radio.turn_on()  # ラジオをオンにします。
    tv.turn_on()     # テレビをオンにします。

利点:

  1. 独立した拡張: 抽象と実装の両方を独立して拡張することができます。
  2. 分離: Bridge パターンは、実装から抽象を分離するのに役立ちます。
  3. 可読性: クラスとその機能が明確に分かれるため、コードの可読性が向上します。

Bridge パターンは、2つの独立した階層またはクラスの間に「橋」をかけることで、これらのクラスや階層が独立して進化できるようにする目的で使用されます。

Discussion