常見的設計模式(python)———工廠模式

源碼前戲

承接上一篇(建造者模式)故事,話說,女媧正在造人,但是效率低下(畢竟神仙也只有一雙手)

於是偉大的女媧think了一下,何不建造一個造人工廠,

說幹就幹,上源碼:

造人工廠v1.0 ----簡單工廠

"""簡單工廠模式"""
class MakeWoman:
    # 製造女人
    """製造女人的具體實現"""

    def __init__(self, name):
        print("製造女人:" + name)

    ...


class MakeMan:
    def __init__(self, name):
        print("製造男人:" + name)


class KeyError(Exception):
    """自定義異常"""

    def __init__(self, code, massage):
        self.code = code
        self.massage = massage


class WomanGod:
    """統一接口"""

    @staticmethod
    def person(sex, name):
        try:
            if sex == "":
                MakeWoman(name)
            elif sex == "":
                MakeMan(name)
            else:
                raise KeyError(0, "性別有問題")
        except KeyError as e:
            print(e.massage)


if __name__ == "__main__":
    WomanGod.person("", "張三")
    WomanGod.person("", "王二妹")

"""ps:簡單工廠模式適用於需創建的對象較少,不會造成工廠方法中的業務邏輯太過複雜的情況下,而且用戶只關心那種類型的實例被創建,
並不關心其初始化過程時,比如多種數據庫(MySQL/MongoDB)的實例,多種格式文件的解析器(XML/JSON)等。
"""

現在好了,女媧只需要給每個人取名字,性別就行了...

in on time,問題出現了,由於長時間的給人類對象取名、性別,女媧感到無比的繁瑣,枯燥,於是

何不改造一下,先造人,暫不取名,直接調方法

上代碼

造人工廠v2.0 ----工廠方法模式

from abc import abstractmethod, ABCMeta


class MakeMan:
    def __str__(self):
        return "製造女人"


class MakeWoman:
    def __str__(self):
        return "製造男人"


class Person(metaclass=ABCMeta):
    @abstractmethod
    def make_something(self):
        print("抽象類")


# class WomanGod:
#     def make_woman(self):
#         return MakeWoman()
#
#     def make_man(self):
#         return MakeMan()
class Woman(Person):
    def make_something(self):
        # super().make_something()
        return MakeWoman()


class Man(Person):
    def make_something(self):
        return MakeMan()


if __name__ == "__main__":
    print(Woman().make_something())

"""工廠方法模式 繼承了簡單工廠模式的優點又有所改進,其不再通過一個工廠類來負責所有產品的創建,
而是將具體創建工作交給相應的子類去做,這使得工廠方法模式可以允許系統能夠更高效的擴展。實際應用中可以用來實現系統的日誌系統等,
比如具體的程序運行日誌,網絡日誌,數據庫日誌等都可以用具體的工廠類來創建。。
"""

其他

"""
除了 簡單工廠模式,工廠方法模式 還有一個叫抽象工廠模式
由於其與女媧故事線有偏差(其實是編不想去了),這裏就做個索引

解釋一下:
抽象工廠模式與工廠方法模式最大的區別在於,
抽象工廠中的一個工廠對象可以負責多個不同產品對象的創建 ,
這樣比工廠方法模式更爲簡單、有效率。

ps:抽象工廠模式在工廠方法基礎上擴展了工廠對多個產品創建的支持,
更適合一些大型系統,比如系統中有多於一個的產品族,
且這些產品族類的產品需實現同樣的接口,
像很多軟件系統界面中不同主題下不同的按鈕、文本框、字體等等。
"""

最後

分享不宜,不喜勿噴,錯誤之處,歡迎指出,一起學習

故事線純屬瞎編,如有雷同,純屬巧合....

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