現代軟體開發需要解決複雜的業務需求。 它還需要考慮未來的可延伸性和可維護性等因素。 良好的軟體系統設計對於實現這些目標至關重要。 設計模式在這樣的系統中起著重要的作用。
要理解設計模式,考慮下面的例子 -
所以,反復建造/生產的所有東西,必然會在其設計中遵循一種模式……汽車,自行車,披薩,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>