生成模式

開放

3.1 單例

Singleton是一種分代設計模式,它保證單線程應用程序將具有某個類的單個實例,並提供對該實例的全局訪問點。

單例

很多時候,新手程序員喜歡將實用方法組裝到一些靜態類中——一個只包含靜態方法的類。這種方法有很多缺點——例如,您不能傳遞對此類對象的引用,此類方法難以測試等。

作為替代方案,提出了單例類解決方案:一個只能有一個對象的類。嘗試創建此對象時,僅當它不存在時才創建,否則返回對已存在實例的引用。

重要的是可以使用類的實例,因為在許多情況下可以使用更廣泛的功能。例如,這個類可以實現一些接口,它的對象可以作為接口的實現傳遞給其他方法。一組靜態方法無法完成的事情。

優點:

  • 方法綁定到對象,而不是靜態類 - 您可以通過引用傳遞對象。
  • 對象方法更容易測試和模擬。
  • 對像只在需要的時候創建:惰性對像初始化。
  • 如果有很多不需要啟動的單曲,則加速程序的初始啟動。
  • 單獨可以進一步變成一個模板策略或幾個這樣的對象。

缺點:

  • 控制線程間競爭和延遲變得更加困難。
  • 很難“從頭”寫一個多線程的“孤獨者”:訪問一個長期存在的單例,理想情況下,不應該打開互斥量。更好的經過驗證的解決方案。
  • 兩個線程之間因未完成的單個線程而發生衝突將導致延遲。
  • 如果長時間創建對象,延遲可能會干擾用戶或破壞實時性。在這種情況下,最好將其創建轉移到程序初始化階段。
  • 單元測試需要特殊功能 - 例如,將庫置於“非孤獨”模式並完全隔離彼此的測試。
  • 需要一種特殊的策略來測試完成的程序,因為甚至“最簡單的可啟動性”的概念也消失了,因為可啟動性取決於配置。

3.2 工廠【方法】

工廠方法是一種通用設計模式,它為子類(類繼承者)提供一個用於創建特定類實例的接口。在創建時,後代可以確定創建哪個類。

換句話說,這個模板將對象的創建委託給父類的後代。這允許您在程序代碼中不使用具體的類,而是在更高層次上操作抽像對象。

工廠方法

此模式定義了一個用於創建對象的接口,但將其留給子類來決定該對象基於哪個類。工廠方法允許類委託子類的創建。在以下情況下使用:

  • 該類事先不知道它需要創建哪些子類的哪些對象。
  • 類的設計使其創建的對象由子類指定。
  • 該類將其職責委託給幾個輔助子類之一,併計劃確定哪個類接管這些職責。

3.3 抽象工廠

抽象工廠是一種通用設計模式,它提供了一個接口來創建相關或相互依賴的對象系列,而無需指定它們的具體類。

該模式是通過創建一個抽像類Factory來實現的,Factory是創建系統組件的接口(例如,對於窗口界面,它可以創建窗口和按鈕)。然後編寫實現該接口的類。

抽象工廠

它用於程序必須獨立於創建的新對象的過程和類型的情況。當有必要創建相關對象的系列或組時,排除在同一上下文中同時使用來自不同組的對象的可能性。

優勢:

  • 隔離特定的類;
  • 簡化產品系列的更換;
  • 保證產品兼容性。

假設您的程序使用文件系統。然後要在 Linux 中工作,您需要 LinuxFile、LinuxDirectory、LinuxFileSystem 對象。要在 Windwos 中工作,您需要 WindowsFile、WindowsDirectory、WindowsFileSystem 類。

通過 Path.of() 創建的 Path 類就是這種情況。Path 實際上不是一個類,而是一個接口,它有 WindowsPath 和 LinuxPath 實現。將創建什麼樣的對像對您的代碼是隱藏的,將在運行時決定。

3.4 原型

原型是一種生成式設計模式。

該模式定義了使用原型實例創建的對像類型,並通過複製該原型來創建新對象。它允許您擺脫實現並遵循“通過接口編程”的原則。

層次結構頂部的接口/抽像類被指定為返回類型,後代類可以替代實現該類型的繼承人。簡單地說,這是通過克隆另一個對象而不是通過構造函數創建對象來創建對象的模式。

原型

該模式用於:

  • 避免以標準方式創建對象的額外工作(意味著使用構造函數,因為在這種情況下,整個對象的祖先層次結構的構造函數也將被調用),而這對於應用程序來說是非常昂貴的。
  • 避免像抽象工廠模式那樣在客戶端應用程序中繼承對象創建者。

當您的程序不關心它如何創建、組合和呈現產品時,請使用此設計模式:

  • 實例化的類是在運行時確定的,例如,使用動態加載;
  • 您希望避免構建與產品類層次結構平行的類或工廠層次結構;
  • 類實例可以處於幾種不同狀態之一。設置適當數量的原型並克隆它們可能更方便,而不是每次都在適當的狀態下手動實例化類。
1
任務
Module 3 a ɛto so abien,  等級 16課堂 2
上鎖
Turnkey Universe
task4106
1
任務
Module 3 a ɛto so abien,  等級 16課堂 2
上鎖
Personnel Forge
task4107
1
任務
Module 3 a ɛto so abien,  等級 16課堂 2
上鎖
Personnel Factories
task4108
1
任務
Module 3 a ɛto so abien,  等級 16課堂 2
上鎖
Prototypes
task4109
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言