設計模式
現代軟件開發需要解決複雜的業務需求。 它還需要考慮未來的可擴展性和可維護性等因素。 良好的軟件系統設計對於實現這些目標至關重要。 設計模式在這樣的系統中起着重要的作用。
要理解設計模式,考慮下面的例子 -
- 每輛車的設計都遵循基本的設計模式,四個車輪,方向盤,加速器 - 斷開離合器等核心驅動系統。
所以,反覆建造/生產的所有東西,必然會在其設計中遵循一種模式……汽車,自行車,披薩,atm機器,甚至是沙發牀。
幾乎成爲軟件中某些邏輯/機制/技術的標準編碼方式的設計,因此被稱爲或研究爲軟件設計模式。
爲什麼設計模式很重要?
使用設計模式的好處是 -
- 通過成熟的方法幫助您解決常見的設計問題。
- 因爲他們有充分的文件記錄,所以理解上沒有含糊之處。
- 縮短整體開發時間。
- 幫助您更輕鬆地處理未來的擴展和修改。
- 可以減少系統中的錯誤,因爲它們是常見問題的可靠解決方案。
設計模式的分類
GoF(四人幫)設計模式分爲三類,即創作型模式,結構型模式和行爲型模式。
創造性模式
創造性設計模式將對象創建邏輯與系統其餘部分分開。創建模式不是創建對象,而是創建它們。 創建模式包括Abstract Factory,Builder,Factory Method,Prototype和Singleton。
由於語言的動態特性,創造型模式在Python中不常用。 語言本身也爲我們提供了足夠優雅時尚所需的所有靈活性,但我們很少需要實現任何東西,比如singleton
或Factory
。
而且這些模式提供了一種在隱藏創建邏輯的同時創建對象的方法,而不是直接使用新的運算符實例化對象。
結構模式
有時候不是從頭開始,而是需要使用現有的一組類來構建更大的結構。 這就是結構類模式使用繼承來構建新結構的地方。 結構對象模式使用組合/聚合來獲得新的功能。 適配器,橋樑,複合材料,裝飾,外牆,享元和代理是結構模式。 他們提供組織課堂層次結構的最佳方法。
行爲模式
行爲模式提供了處理對象間通信的最佳方式。 這種類型下的模式是:訪問者,責任鏈,命令,口譯員,迭代器,調解員,紀念品,觀察者,狀態,策略和模板方法都是行爲模式。
由於它們代表系統的行爲,因此通常用它們來描述軟件系統的功能。
常用的設計模式
單例
它是所有設計模式中最具爭議性和知名度之一。 它用於過度面向對象的語言,是傳統的面向對象編程的重要組成部分。
Singleton模式用於,
- 當需要執行日誌記錄時。 記錄器實例由系統的所有組件共享。
- 配置文件正在使用它,因爲信息緩存需要由系統中的所有各種組件維護和共享。
- 管理與數據庫的連接。
這裏是UML圖,
class Logger(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_logger'):
cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger
在這個例子中,Logger
是一個Singleton
。
當__new__
被調用時,它通常會構造該類的新實例。 當重寫它時,首先檢查單例實例是否已經創建。 如果沒有創建,則使用supper
調用來創建它。 因此,無論什麼時候在Logger上調用構造函數,都會得到完全相同的實例。
>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>