書名: 精通Python設計模式(第2版)作者名: (法)卡蒙·阿耶娃 (荷)薩基斯·卡薩姆帕利斯本章字數: 877字更新時間: 2020-04-22 12:23:51
第1章 工廠模式
設計模式是可復用的編程解決方案,在各種現實場景中被廣泛使用,并且已被證實能夠產生預期的結果。它們在程序員中廣為流傳,并與時俱進。設計模式的流行得益于Erich Gamma、Richard Helm、Ralph Johnson與John Vlissides合著的《設計模式:可復用面向對象軟件的基礎》(后面簡稱《設計模式》)一書。
“四人組”:這本由Erich Gamma、Richard Helm、Ralph Johnson與John Vlissides合著的書又被簡稱為“四人組”書(還有一種更簡潔的形式——GoF書)。
以下是一段有關設計模式的描述,引自《設計模式》一書:
設計模式針對面向對象系統中重復出現的設計問題,提出一個通用的設計方案,并予以系統化的命名和動機解釋。它描述問題,提出解決方案,指出何時適用此方案,并說明方案的效果。它同時也提供實現代碼的提示與示例。該解決方案是用以解決該問題的一組通用的類和對象,經過定制和實現就可用來解決特定上下文中的問題。
面向對象編程中有多種設計模式可以使用,具體使用哪種,取決于問題類型或者解決方案類型。在《設計模式》中,“四人組”向我們呈現了23種設計模式,并分為3類:創建型、結構型和行為型。
創建型設計模式是本書將要介紹的第一種類型。我們將通過本章、第2章和第3章來闡述。這些模式對應于對象創建過程的不同方面。它們的目的是在不便直接創建對象的時候(如在Python中使用__init__()函數),提供更好的替代方案。
查看https://docs.python.org/3/tutorial/classes.html以了解對象類和特殊的__init__()函數。Python用它們來創建新的類實例。
我們將從工廠設計模式入手,它是《設計模式》一書中的第一個創建型設計模式。在工廠模式中,客戶端(意為調用后文所提及對象的代碼)在不知道對象來源(即不知道該對象是用哪個類產生的)的情況下,要求創建一個對象。工廠模式背后的思想是簡化對象的創建過程。與客戶端直接使用類實例化來創建對象相比,使用一個中心函數來創建對象顯然更容易追蹤。通過將創建對象的代碼與使用對象的代碼解耦,工廠模式能夠降低維護應用的復雜度。
工廠模式通常有兩種形式:一種是工廠方法,它是一個方法(或以地道的Python術語來說,是一個函數),針對不同的輸入參數返回不同的對象;另一種是抽象工廠,它是一組用于創建一系列相關對象的工廠方法。
本章將討論:
? 工廠方法
? 抽象工廠