Python設計模式之門面模式

門面模式

  • 是一個結構型設計模式
  • 給子系統中的接口提供統一接口,使用更加簡單。
  • 實現:用單一接口解決複雜問題。
  • 不是對子系統的再封裝,而是對子系統進行組合。

UML圖

image

結構型設計模式概述

  • 用於描述如何將對象和類組合成更好的結構
  • 是一種能夠簡化設計工作的模式,因爲他能夠找出更簡單的方法來表示實體(對象或者類)之間的關係。
  • 類模式通過繼承描述對象,從而提供更有用的程序接口。對象模式通過描述對象之間的聯繫從而組成更大的對象。結構型模式是二者的綜合。
  • 例如:
    • 適配器:把接口轉化成用戶要的另一個接口。
    • 橋接:把對象的接口和實現進行解耦,讓他們獨立工作。
    • 裝飾器:動態的給運行時的對象添加任務或者屬性(不改變原對象、原代碼)。

實現

  • 門面模式本質是一個接口,他知道某個請求可以交給哪個子系統完成

給一個例子:你要舉行婚禮,請了一個經理來操辦事物。
客戶端:你,聯繫經理花錢來辦這個活動,提出需求
門面:經理,來聯繫各個機構(比如花卉,酒席)
子系統:各個服務部門,比如提供菜品的,提供燈光的

# 酒店類,預定酒店
class Hotelier(object):
    def __init__(self):
        pass

    def __is_available(self):
        return True

    def book_hotel(self):
        if self.__is_available():
            print('預定了酒店')


# 花卉類
class Florist(object):
    def __init__(self):
        print('初始化放花的類')

    def set_flowers(self):
        print('放了好多花')


# 宴席類
class Caterer(object):
    def __init__(self):
        pass

    def set_cuisine(self):
        print('有好多吃的')


# 音樂類
class Musician(object):
    def __init__(self):
        pass

    def set_music(self):
        print('放音樂')


# 經理類
class EventManager(object):
    def __init__(self):
        pass

    def arrange(self):
        self.hotelier = Hotelier()
        self.hotelier.book_hotel()  # 訂酒店

        self.florist = Florist()
        self.florist.set_flowers()  # 放花

        self.caterer = Caterer()
        self.caterer.set_cuisine()  # 定菜

        self.musician = Musician()
        self.musician.set_music()  # 放音樂


class You(object):
    def __init__(self):
        print('我的任務開始')

    def let_manager_work(self):
        EventManager().arrange()

    def __del__(self):
        print('我的任務結束')


you = You()
you.let_manager_work()
'''結果:
我的任務開始
預定了酒店
初始化放花的類
放了好多花
有好多吃的
放音樂
我的任務結束'''

這就是門面模式,優點很明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章