Python

Python デザインパターンを学ぶ Facadeパターン

概要

Facadeパターン(Facadeの読みは、ファサード)は、より複雑なオブジェクトを背後に隠す高次のインターフェイスを作る。Facadeパターンは以下のような状況で特に有効。

  • 複雑なサブシステムやサブオブジェクトに依存した/依存したシステムが必要である
  • システムをオブジェクトとして表現できる

以下の実装例では、Facadeクラスは、複雑なサブシステムのファサードを表現しており、2つのシンプルなメソッドのみを公開し、他のすべての内部インタラクションを隠す。

実装例

class AbstractApi():
    def get_value(self):
        pass

    def update_value(self, value):
        pass

    def get_session(self):
        pass


class ProductApi(AbstractApi):
    pass


class Product2Api(AbstractApi):
    pass


class UserApi():
    def send_value(self, medium, session):
        pass

    def get_new_value(self, medium, value):
        pass


class Facade():

    def __init__(self, user, token):
        self._authenticate(user, token)
        self.apis = {
            "product": ProductApi(),
            "product2": Product2Api()
        }
        self.user_api = UserApi()

    def get_all_value(self):
        value_list = []
        for medium in self.apis:
            value_list.append(self.apis[medium].get_value())

        print("done.")

    def update(self, medium, value):

        session = self.apis[medium].get_session()

        self.user_api.send_value(medium=medium, session=session)

        new_value = self.user_api.get_new_value(medium=medium, value=value)

        self.apis[medium].update_value(new_value)

        print("done.")

    def _authenticate(self, user, token):
        pass


if __name__ == "__main__":

    user = "user_name"
    token = "token_sample"

    facade = Facade(user, token)
    facade.get_all_value()
    facade.update("product", "test")