Site icon imageTomoMemo.dev

Memo on programming. Provided by Tomo with passion.

Pythonで学ぶデザインパターン[facade]

Icon in a callout block
Python 100Days Challenge Day22

facadeパターンについて解説する。

概要

  • 複雑なインターフェースを単純にするためのデザインパターン
  • ざっくりいうと複雑な物を簡単にするための窓口

たとえば、図書館にいくとき、本を借りるためにいろいろな手続きをしなければならない。

これは超大変。

図書館の受付の方がすべての手続きをやってくれるので、僕たちは「本を借りたいです」

というだけで済む。

こんなイメージがあればOK。

書いてみる

では、LibraryFacadeクラスを作成して、複雑な図書館の手続きをまとめて簡単に使えるようにしてみる。

# 複雑な図書館の手続きを表すクラス
class Catalog:
    def find_book(self, title):
        print(f"本 '{title}' をカタログで探しています...")
        return True

class Membership:
    def check_membership(self, member_id):
        print(f"メンバーシップID '{member_id}' を確認しています...")
        return True

class Loan:
    def issue_loan(self, title, member_id):
        print(f"メンバーシップID '{member_id}' に本 '{title}' の貸し出しを処理しています...")
        return True

# Facadeクラス
class LibraryFacade:
    def __init__(self):
        self.catalog = Catalog()
        self.membership = Membership()
        self.loan = Loan()

    def borrow_book(self, title, member_id):
        if self.catalog.find_book(title) and self.membership.check_membership(member_id):
            self.loan.issue_loan(title, member_id)
            print(f"本 '{title}' を借りる手続きが完了しました!")

# クライアントコード
if __name__ == "__main__":
    library = LibraryFacade()
    library.borrow_book("Python Programming", "12345")

こう書くとクライアントコードでは、LibraryFacadeクラスのborrow_bookメソッドを呼び出すだけで本を借りるための全ての手続きが行われる。

これによってユーザーは複雑な手続きをしなくても簡単に本を借りれる。

Powered by Tomo with passion.