設計模式


現代軟體開發需要解決複雜的業務需求。 它還需要考慮未來的可延伸性和可維護性等因素。 良好的軟體系統設計對於實現這些目標至關重要。 設計模式在這樣的系統中起著重要的作用。

要理解設計模式,考慮下面的例子 -

  • 每輛車的設計都遵循基本的設計模式,四個車輪,方向盤,加速器 - 斷開離合器等核心驅動系統。

所以,反復建造/生產的所有東西,必然會在其設計中遵循一種模式……汽車,自行車,披薩,atm機器,甚至是沙發床。

幾乎成為軟體中某些邏輯/機制/技術的標準編碼方式的設計,因此被稱為或研究為軟體設計模式。

為什麼設計模式很重要?

使用設計模式的好處是 -

  • 通過成熟的方法幫助您解決常見的設計問題。
  • 因為他們有充分的檔案記錄,所以理解上沒有含糊之處。
  • 縮短整體開發時間。
  • 幫助您更輕鬆地處理未來的擴充套件和修改。
  • 可以減少系統中的錯誤,因為它們是常見問題的可靠解決方案。

設計模式的分類

GoF(四人幫)設計模式分為三類,即創作型模式,結構型模式和行為型模式。

創造性模式
創造性設計模式將物件建立邏輯與系統其餘部分分開。建立模式不是建立物件,而是建立它們。 建立模式包括Abstract Factory,Builder,Factory Method,Prototype和Singleton。

由於語言的動態特性,創造型模式在Python中不常用。 語言本身也為我們提供了足夠優雅時尚所需的所有靈活性,但我們很少需要實現任何東西,比如singletonFactory

而且這些模式提供了一種在隱藏建立邏輯的同時建立物件的方法,而不是直接使用新的運算子範例化物件。

結構模式
有時候不是從頭開始,而是需要使用現有的一組類來構建更大的結構。 這就是結構類模式使用繼承來構建新結構的地方。 結構物件模式使用組合/聚合來獲得新的功能。 介面卡,橋樑,複合材料,裝飾,外牆,享元和代理是結構模式。 他們提供組織課堂層次結構的最佳方法。

行為模式
行為模式提供了處理物件間通訊的最佳方式。 這種型別下的模式是:存取者,責任鏈,命令,口譯員,迭代器,調解員,紀念品,觀察者,狀態,策略和模板方法都是行為模式。

由於它們代表系統的行為,因此通常用它們來描述軟體系統的功能。

常用的設計模式

單例
它是所有設計模式中最具爭議性和知名度之一。 它用於過度物件導向的語言,是傳統的物件導向程式設計的重要組成部分。

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>