Python設計模式



概述

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

為了理解設計模式,讓我們考慮以下示例:

  • 每輛汽車的設計都遵循基本的設計模式:四個輪子、方向盤、核心驅動系統(如加速器-制動器-離合器)等等。

所以,所有重複構建/生產的東西,不可避免地在設計中遵循某種模式……無論是汽車、腳踏車、披薩、自動取款機,還是任何東西……甚至你的沙發床。

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

為什麼設計模式很重要?

使用設計模式的好處包括:

  • 透過行之有效的方法幫助您解決常見的設計問題。

  • 由於它們有良好的文件記錄,因此理解上沒有歧義。

  • 減少整體開發時間。

  • 幫助您比以往更容易地處理未來的擴充套件和修改。

  • 由於它們是針對常見問題的行之有效的解決方案,因此可以減少系統中的錯誤。

設計模式的分類

GoF(四人幫)設計模式分為三大類:建立型、結構型和行為型。

建立型模式

建立型設計模式將物件建立邏輯與系統的其餘部分分離。建立型模式為您建立物件,而不是您自己建立物件。建立型模式包括抽象工廠、建造者、工廠方法、原型和單例。

由於語言的動態特性,建立型模式在Python中並不常用。而且語言本身提供了我們建立足夠優雅方式所需的所有靈活性,我們很少需要在其之上實現任何東西,例如單例或工廠。

此外,這些模式提供了一種建立物件的方式,同時隱藏了建立邏輯,而不是直接使用new運算子例項化物件。

結構型模式

有時,您不需要從頭開始,而是需要使用現有的類集構建更大的結構。這就是結構型類模式使用繼承來構建新結構的地方。結構型物件模式使用組合/聚合來獲得新的功能。介面卡、橋接、組合、裝飾器、外觀、享元和代理是結構型模式。它們提供了組織類層次結構的最佳方法。

行為型模式

行為型模式提供了處理物件之間通訊的最佳方法。屬於此類別的模式包括:訪問者、責任鏈、命令、直譯器、迭代器、中介者、備忘錄、觀察者、狀態、策略和模板方法都是行為型模式。

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

常用的設計模式

單例模式

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

單例模式用於:

  • 實現日誌記錄時。日誌記錄器例項由系統的全部元件共享。

  • 配置檔案使用它,因為需要維護資訊快取並由系統中的所有各種元件共享。

  • 管理資料庫連線。

這是一個UML圖:

UML Diagram

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是一個單例。

當呼叫`__new__`時,它通常會構造該類的新的例項。當我們重寫它時,我們首先檢查我們的單例例項是否已經被建立。如果沒有,我們使用super呼叫來建立它。因此,無論何時我們在Logger上呼叫建構函式,我們總是得到完全相同的例項。

>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>
廣告