概要
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")