了解工廠和工廠方法設計模式
什麼是工廠類別?工廠類別是一種創建一個或多個不同類別的物件的類別。
工廠模式可以說是軟體工程中最常用的設計模式。在本文中,我將使用一個簡單的範例問題深入解釋簡單工廠和工廠方法設計模式。
簡單工廠模式
假設我們要創建一個支援兩種動物(例如狗和貓)的系統,每個動物類別都應該有一個方法來發出動物的聲音類型。現在,客戶希望使用該系統根據客戶的使用者輸入發出動物的聲音。上述問題的基本解決方案可以寫成如下:
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass class Dog(Animal): def make_sound(self): print("Bhow Bhow!") class Cat(Animal): def make_sound(self): print("Meow Meow!")
透過這個解決方案,我們的客戶將像這樣使用系統
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") if animal_type.lower() == 'dog': Dog().make_sound() elif animal_type.lower() == 'cat': Cat().make_sound()
我們的解決方案可以正常工作,但簡單工廠模式表明我們可以做得更好。為什麼?正如您在上面的客戶端程式碼中看到的,客戶端必須決定一次要呼叫哪個動物類別。想像一下該系統有十種不同的動物類別。您已經可以看到我們的客戶使用該系統會遇到多大的問題。
所以這裡簡單工廠模式只是說,不要讓客戶端決定呼叫哪個類,而是讓系統為客戶端決定。
要使用簡單工廠模式解決問題,我們所需要做的就是創建一個工廠類,其中包含負責動物物件創建的方法。
... ... class AnimalFactory: def make_sound(self, animal_type): return eval(animal_type.title())().make_sound()
透過這種方法,客戶端程式碼變成:
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") AnimalFactory().make_sound(animal_type)
總之,簡單工廠模式就是建立一個代表客戶端處理物件建立的工廠類別。
工廠方法模式
回到我們的問題陳述,即有一個僅支持兩種動物(狗和貓)的系統,如果這個限制被消除並且我們的系統願意支持任何類型的動物怎麼辦?當然,我們的系統無法為數百萬隻動物提供實現。這就是工廠方法模式可以發揮作用的地方。
在工廠方法模式中,我們定義一個抽象類別或介面來創建對象,但不是由工廠負責對象的創建,而是將責任推遲到決定要實例化的類別的子類別。
工廠方法模式的關鍵組件
Creator:Creator 是抽象類別或介面。它聲明了工廠方法,這是創建物件的方法。 Creator 提供了建立產品的接口,但沒有指定其特定類別。
具體造物主:具體造物主是造物主的子類。他們實作工廠方法,決定實例化哪個特定產品類別。換句話說,每個具體創造者都專注於創造特定類型的產品。
產品:產品是另一個抽象類別或介面。它定義了工廠方法創建的物件的類型。這些產品共享一個通用的接口,但它們的具體實現可能有所不同。
混凝土產品:混凝土產品是產品的子類。他們提供了產品的具體實現。每個特定產品對應於工廠方法所建立的一種類型的物件。
以下是我們的系統程式碼使用工廠方法模式的樣子:
第 1 步:定義產品
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass class Dog(Animal): def make_sound(self): print("Bhow Bhow!") class Cat(Animal): def make_sound(self): print("Meow Meow!")
第 2 步:建立混凝土產品
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") if animal_type.lower() == 'dog': Dog().make_sound() elif animal_type.lower() == 'cat': Cat().make_sound()
第三步:定義創作者
... ... class AnimalFactory: def make_sound(self, animal_type): return eval(animal_type.title())().make_sound()
第 4 步:實作具體創建者
## client code if __name__ == '__main__': animal_type = input("Which animal should make sound Dog or Cat?") AnimalFactory().make_sound(animal_type)
客戶可以使用以下解決方案:
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def make_sound(self): pass
工廠方法模式解決方案允許客戶擴展系統並在需要時提供自訂動物實作。
工廠方法模式的優點
解耦:將客戶端程式碼與具體類別解耦,減少依賴,增強程式碼穩定性。
靈活性:它帶來了很大的靈活性並使程式碼通用,而不是綁定到某個類別進行實例化。這樣,我們就依賴介面 (Product),而不是 ConcreteProduct 類別。
可擴充性:無需修改現有程式碼即可新增新的產品類,提倡開閉原則。
結論
工廠方法設計模式提供了一種系統化的方法來建立對象,同時保持程式碼的可維護性和適應性。它在物件類型變化或演變的場景中表現出色。
框架、函式庫、外掛系統和軟體生態系統都受益於它的強大功能。它允許系統適應不斷變化的需求。
但是,應該謹慎使用它,考慮應用程式的具體需求和簡單性原則。如果應用得當,工廠方法模式可以對軟體系統的整體設計和架構做出重大貢獻。
編碼愉快! ! !
以上是了解工廠和工廠方法設計模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。
