常见的设计模型(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()  # 女娲拿胖人实例开造

最后

下一篇 工厂模型

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