1. 程式人生 > >淺談設計模式之簡單工廠模式與策略模式

淺談設計模式之簡單工廠模式與策略模式

本文主要是關於面向物件程式設計(OOP)的設計模式,瞭解優秀軟體設計的演變過程比學習優秀的設計本身更有價值,因為設計演變的過程蘊藏著巨大的智慧,是一代一代程式設計師的思想的結晶。通過學習設計模式,設計出易於維護、擴充套件、複用以及靈活性好的程式;使用多型、繼承、封裝提高程式的聚合度,降低耦合性。

1. 簡單工廠模式(Simple Factory Pattern)

  • 又叫靜態工廠模式(Static FactoryMethod
    Pattern),是指通過專門定義一個單獨的類來負責建立其他類的例項,被建立的例項通常都具有共同的父類,這就是工廠。
  • 若要繼續往在業務邏輯中增加新的功能,只需在工廠內部增加相應的分支,在外部編寫子類的實現。

2.簡單工廠模式的UML類圖

  • 類圖一般分為三層,第一層表示類名,如果是抽象類,則以斜體表示。第二層是類的特性,通常就是欄位和屬性。第三層是類的操作,通常是方法或行為。注意前面的”+”表示public,”-“表示private,”#”表示protected。

  • 當類圖頂端有一個<>顯示時,表示這是一個介面圖。第一行表示介面名,第二行表示接口裡面的方法。
    接下來討論類與類,類與介面之間的關係:
    繼承用空心三角形+實線表示;
    實現介面用空心三角形+虛線表示;
    關聯用實箭頭表示;
    聚合用空心的菱形+實線箭頭表示,聚合表示的是一種弱的擁有關係,體現的是A物件可以包含B物件,但B物件不是A物件的一部分。
    合成用實心的菱形+實線箭頭表示,是一種強的擁有關係,體現了嚴格的部分與整體的關係,部分與整體的生命週期一樣。
    依賴關係是虛線箭頭表示。

3.策略模式(Strategy Pattern)

  • 面向物件的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。而策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化不會影響到使用演算法的使用者。

  • 用工廠來生成演算法物件,把變化點封裝起來,即在具體的策略類中封裝具體的演算法或者行為,並且讓其繼承與Strategy類,而在策略類Strategy中定義所有支援演算法的公共介面。

4.策略模式解析

  • 通過以上的分析,我們可知策略模式是一種定義了一系列演算法的方法,所有的方法完成相同的工作,只是具體的實現有所不同而已,它可以以相同的方式呼叫所有的演算法減少了各種演算法與演算法實用類之間的耦合。
    顯而易見,策略模式的Strategy類層次為Context定義了一系列可供重用的演算法或者行為,繼承有助於解析這些演算法的公共功能;同時,簡化了單元的測試,通過各自的介面即可單獨測試。
  • 策略模式就是用來封裝演算法的,在實際使用中可用它來封裝幾乎所有型別的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,即可考慮策略模式來處理。但是在基本的策略模式中,選擇實現的職責由客戶端物件處理,並轉給策略模式的Context物件。