常見的設計模型(python)——建造者模型

源碼故事
混沌初開,自盤古開天,人間無一物。
忽一日,天出異象,眺望遠方,定睛一看,一位腳踏七彩祥雲,手捧橡皮泥,的仙人出現了(後世稱爲女媧),女媧有個idea,如下:
人間如此荒涼,何不造一些活物。
說是實那時快,女媧已經造好了人類的原型(有雙手,雙腳,頭,身體)
女媧愣一想,人類不能都一樣,肯定有胖有瘦(於是基於人類外形,又創造了胖瘦原型)
編不下去了^_^
本文主要講python常見的設計模式 --- 建造者模式
上代碼...
源碼
from abc import ABCMeta, abstractmethod


class Person(metaclass=ABCMeta):
    """
    導入抽象類,抽象裝飾器
    ps:抽象類(實現基本接口,原型)不能被實例化,只能繼承(繼承類中實現抽象方法),
    否則 TypeError: Can't instantiate abstract class...
    """

    @abstractmethod
    def left_hand(self):
        pass

    @abstractmethod
    def right_hand(self):
        pass

    @abstractmethod
    def left_foot(self):
        pass

    @abstractmethod
    def right_foot(self):
        pass

    @abstractmethod
    def head(self):
        pass

    @abstractmethod
    def body(self):
        pass


class Fat(Person):
    """胖人,繼承基類(人類)"""

    def left_hand(self):
        # 實現具體方法
        print("胖左爪")

    def right_hand(self):
        print("胖左爪")

    def left_foot(self):
        print("胖左jio")

    def right_foot(self):
        print("胖右jio")

    def head(self):
        print("胖頭")

    def body(self):
        print("胖身體")


class Thin(Person):
    """瘦人,繼承基類(人類)"""

    def left_hand(self):
        print("瘦左爪")

    def right_hand(self):
        print("瘦左爪")

    def left_foot(self):
        print("瘦左jio")

    def right_foot(self):
        print("瘦右jio")

    def head(self):
        print("瘦頭")

    def body(self):
        print("瘦身體")


class WomanGod:
    """準備工作做完,女媧開始造人"""

    def __init__(self, person):
        # 這個傳遞實例對象(胖人或瘦人)
        self.person = person

    def make(self):
        # 女媧開始造(胖人或瘦人)的具體部位
        self.person.left_hand()
        self.person.right_hand()
        self.person.left_foot()
        self.person.right_foot()
        self.person.head()
        self.person.body()


if __name__ == "__main__":
    thin = Thin()  # 胖人實例
    fat = Fat()  # 瘦人實例
    woman_god = WomanGod  # 女媧
    woman_god(thin).make()  # 女媧拿瘦人實例開造
    woman_god(fat).make()  # 女媧拿胖人實例開造

最後

下一篇 工廠模型

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