設計模式相關

1、設計模式

設計模式是一套被反復使用,多數人知曉的,經過分類編目的、代碼設計經驗的總結。使用設計模式的目的是為了代碼重用,避免程序大量修改,同時是代碼更容易被他人理解,并且保證代碼的可靠性。設計模式對自己,他人,系統都是有益的,設計模式使得代碼編制真正的工程化,可以說設計模式是軟件設計的基石。

常見的設計模式有:工廠模式,單例模式,適配器模式,享元模式以及觀察者模式。

2、單例模式

在某些情況下,有些對象只需要一個就可以了,即每個類只需要一個實例。例如,一臺計算機上有多臺打印機,但是這個計算機上打印程序只能有一個,這就需要單例模式兩個打印作業同時輸出到打印機中。

簡單來說單例模式(單件模式)的作用就是保證整個程序的生命周期中,任何時刻,單例的實例都只存在一個(也可以不存在)。單例模式確保一個類只有一個實例,而且自行實例化并向整個系統提供這個實例單例模式。單例模式只有在真正的“單一實例”的需求時才可使用。

需要區分一下全局變量和單例模式。首先,全局變量是一個對象的靜態引用,全局變量的確可以提供單例模式全局訪問的功能,但是,它并不能保證應用程序只有一個實例。同時,在編碼規范中,也明確指出要少使用全局變量以增加程序的可讀性,還有就是全局變量不能實現繼承(雖然單例模式在繼承上不能很好地處理,但是還是可以實現繼承的)。單例模式的話,其在類中保存了唯一的實例,單例模式的構造函數必須為私有,同時提供一個全局訪問點。

3、工廠模式

工廠模式是專門負責實例化大量公共接口的類,工廠模式可以動態決定將哪一個類實例化,而不是事先知道每次要實例化哪個類。客戶類和工廠類是分開的。消費者無論什么時候需要某種產品,需要做的只是向工廠提出請求即可。消費者無需修改就可以接納新產品。當然,也存在缺點,當產品修改時,工廠類也需要作出修改。

工廠模式包含以下幾種形態:

  • 1)簡單工廠模式
    簡單工廠模式的工廠類是根據提供給它的參數,返回幾個可能產品的一個類的實例,通常情況下,通常它返回的類都有一個公共父類和公共方法。

  • 2)工廠方法模式
    工廠方法模式是類的創建模式,其用意是定義一個用于創建產品對象的工廠接口,而將實際創建工作推遲到工廠接口的子類中。它屬于簡單工廠模式的進一步抽象和推廣。多態的使用,使得工廠方法模式保持了簡單工廠模式的優點。

  • 3)抽象工廠模式
    抽象工廠模式是所有形態的工廠模式中最為抽象和具有一般性的一種形態。抽象工廠模式是指當有多個抽象角色同時使用一種工廠模式,抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體情況下,創建多個產品對象。根據LSP原則,任何接受父類的地方,都應能接受子類。工廠類負責創建抽象產品的具體子類的實例。

4、適配器模式

適配器模式也稱為變壓器模式,它是一個類的接口轉化成為客戶端所期待的另一種接口,從而使原本接口不匹配而無法一起工作的兩個類能夠在一起工作。適配類可以根據所傳遞的參數返回一個適合的實例給客戶端。

適配器模式主要應用于“希望復用一些現存的類,但是接口又與復用環境不一致的情況”,在遺留代碼復用、類庫遷移等方面非常有用。同時適配器模式也有對象適配器和類適配器兩種形式的實現結構,類適配器采用“多繼承”的實現方式,會引起高耦合度,所以一般不推薦使用,對象適配器采用“對象組合”的方式,耦合度低,應用范圍更廣。

例如,現在系統已經實現了點,線,正方形,現在客戶需要實現一個圓形,一般做法是建立一個Circle類繼承shape類,然后去實現對應的display,fill,undisplay等方法。此時,發現其他項目組已經實現了一個畫圓的類,但是他的方法方法名卻不同,displayll,fillhh,undisplayhh,我們不能直接復用,因為無法保證多態,此時可以采用適配器模式。

5、享元模式

享元模式以共享的方式高效地支持大量的細粒度對象。享元模式能做到的關鍵是區分內蘊和外蘊、內蘊狀態是存儲在享元內部,不會隨環境改變而改變的部分。外蘊狀態隨環境而變化。外蘊狀態不影響內蘊,兩者是相互獨立的。將可以共享的狀態和不可共享的狀態從常規類中區分開,將不可共享的狀態從類中剔除。客戶端不可直接創建被共享的狀態,而應當使用一個工廠對象創建被共享的對象。享元模式可以大幅度降低內存中對象的數量。

6、觀察者模式

觀察者模式(發布/訂閱模式)提供了避免組件之間緊密耦合的另一種方法,它將觀察者與被觀察者分開。在該模式中,一個對象通過添加一個方法(該方法允許另一個被稱為觀察者的對象注視自己)使本身變得可觀察。當可觀察的對象更改時,它將消息傳送到自己注冊的觀察者。這些觀察者使用該信息執行的操作可與觀察者對象無關。

例如,用戶界面可與作為一個觀察者,業務數據是被觀察者,用戶界面觀察業務數據的變化,發現數據變化后,就顯示在界面上。面向對象設計的原則是:系統中的每個類重點放在某一個功能上,而不是兼顧所有。一個對象只做一件事,并將它做好。觀察者模式在模塊之間劃定了清晰的界限,提高了應用程序的可維護性和可重用性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容