nono blog
楽しい人生を送りたい!
ITスキル

pythonプログラム デザインパターン(Facade)

構造パターンの一つFacadeパターンについて。

Facadeパターンとは

Facadeパターン
(ファサードと読む)

Facade : 建物の正面のこと。
各クラスが関連しあって実行される複雑な処理を、Facadeが各クラスを利用して
わかりやすく実行できるようにする。

(イメージ)
クライアント → Facade(正面) ⇆ クラス1、クラス2、クラス3、、、

(目的)
複雑なシステムを扱うための、シンプルなインターフェースを提供すること

(仕組み)
システムを構成するクラスを作成する。
システムを構成するクラスを利用するためのFacadeを作成し、ユーザに対するインターフェースを提供する。

(構成要素)
Facade : システムを構成する様々なクラスを利用するためのクラス
その他のクラス:いろんな処理を記載されたFacadeクラス

サンプルプログラム

pythonによるサンプルプログラム

class Knife:

    def __init__(self, name):
        self.__name = name

    def cut_vegetables(self):
        print(f'I cut vegetable by {self.__name}')


class Boiler:

    def __init__(self, name):
        self.__name = name

    def boil_vegetables(self):
        print(f'I boil vegetables by {self.__name}')


class Frier:

    def __init__(self, name):
        self.__name = name

    def fry_vegetables(self):
        print(f'I fry vegetables by {self.__name}')


class Cook:

    def __init__(self, knife: Knife,
                 frier: Frier, boiler: Boiler):
        self.__knife = knife
        self.__frier = frier
        self.__boiler = boiler

    def cook_dish(self):
        self.__knife.cut_vegetables()
        self.__frier.fry_vegetables()
        self.__boiler.boil_vegetables()


if __name__ == '__main__':

    knife = Knife('My knife')
    boiler = Boiler('My Boiler')
    frier = Frier('My Frier')

    knife.cut_vegetables()
    boiler.boil_vegetables()
    frier.fry_vegetables()

    print('='*10)
    cook = Cook(knife, frier, boiler)
    cook.cook_dish()