🐊

Facade

2023/09/10に公開

Facade(ファサード)パターンは、複雑なサブシステムのインターフェースを単純化するためのデザインパターンです。このパターンでは、シンプルな一つのインターフェースを介してサブシステムの一連のインターフェースにアクセスできるようにします。これにより、サブシステムを使用するクライアントは、サブシステム内部の複雑さを知らなくてもその機能を利用できます。

主要な構成要素:

  1. Facade (ファサード): クライアントからのリクエストを適切なサブシステムのオブジェクトに転送する役割を持つクラス。
  2. Subsystem (サブシステム): ファサードによってラップされる一連の複雑なクラスや機能。

例:

音楽システムの操作を考えてみましょう。これには、アンプ、チューナー、CDプレーヤーなど、多くの部品や操作が含まれます。

  1. Subsystem:

    class Amplifier:
        def on(self):
            print("Amplifier is on")
        def set_volume(self, level):
            print(f"Setting volume to {level}")
    
    class Tuner:
        def set_am(self):
            print("Setting to AM mode")
        def set_fm(self):
            print("Setting to FM mode")
    
    class CDPlayer:
        def play(self, track):
            print(f"Playing track {track}")
    
    
  2. Facade:

    class MusicSystemFacade:
        def __init__(self, amp, tuner, cd_player):
            self.amp = amp
            self.tuner = tuner
            self.cd_player = cd_player
    
        def play_music(self, track):
            self.amp.on()
            self.amp.set_volume(5)
            self.tuner.set_fm()
            self.cd_player.play(track)
    
    

使用方法:

    amp = Amplifier()
    tuner = Tuner()
    cd_player = CDPlayer()

    music_system = MusicSystemFacade(amp, tuner, cd_player)
    music_system.play_music("Track 1")
    # 出力:
    # Amplifier is on
    # Setting volume to 5
    # Setting to FM mode
    # Playing track Track 1

利点:

  1. 単純化: クライアントは、複雑なサブシステムを単純なインターフェースを通じて利用できます。
  2. 分離: クライアントとサブシステムの間の依存関係が軽減されます。

Facade パターンは、クライアントが複雑なサブシステムと直接やり取りする代わりに、単一の統合されたインターフェースを提供することで、システムの使用を容易にするために使用されます。

Discussion