1. 程式人生 > >我理解的設計模式——上

我理解的設計模式——上

        這一段時間看了多個設計模式,但是其中的箇中道理還是有些模糊,所以就整理了一下,這些整理是我基於對《大話設計模式》中例子和類圖的理解上,又針對我自己的看法,用自己的話寫出來的,其中肯定會有許多不準確的地方,如果有什麼不當的地方望大家多多指正,也可相互討論,有助於我們共同理解。

一、簡單工程模式。

       簡單工程模式用來解決物件建立問題,它可以根據客戶端給出的條件返回相應的物件。

二、策略模式

       此模式對演算法進行了很好的封裝,使演算法和客戶端之間解耦,在客戶端中去例項化相應的策略,讓例項化的策略作為Context的一個引數,再依據傳入的引數(即例項化的不同策略),呼叫相應的演算法。客戶端只負責例項化策略和呼叫相應的方法,這樣演算法的變化便不會影響到使用演算法的客戶。

三、裝飾模式

       裝飾模式用來動態的給一個類新增功能;從內部來看就是用物件來包裝物件,從而給最內部的物件新增功能。對比類圖(P50)來看就是要對Component包裝,最初的例項可以看做ConcreteComponent的例項,然後由Decorator來指導它下邊的類對ConcreteComponent層層包裝。

四、代理模式

       代理模式簡單來看就是一種替代功能,由代理類去代替某個物件做相應操作,從而也控制了對該物件的訪問;一般代理類和真實類要實現同一個介面,將真實類的例項化和相應方法分別傳入到代理類的例項化和對應的方法中,便順理成章的達到了代理的操作即是真實類的操作的目的。

五、工廠方法模式

       工廠方法模式要對比簡單工廠模式來看,對比來看工廠方法模式就是對類的例項化的一種延遲,延遲到了其子類中,將簡單工廠的內部的邏輯判斷移到了客戶端程式碼進行。如果這樣來看的話我想可以認為工廠方法是簡單工廠的改進。

六、原型模式

       原型模式最關鍵的一點是有一個Clone方法,先指定一個原型的介面,由具體的原型類去實現這個介面,而在後續的例項化過程中,由於Clone方法的使用,可以對已經例項化的原型進行克隆,從而生成新的物件,如果有細節上的更改可以呼叫具體原型類中的相應的方法去改變。

七、模板方法模式

       模板方法中其中一個類定義了一系列的操作,一些抽象的方法到子類中實現,還有一個模板的方法,給出的是一個邏輯的骨架,其內部的方法到子類中去實現。

八、外觀模式

       此模式可以為子系統的一組介面提供一個一致的介面(即一個外觀類),通過一個高層的介面使這個子系統更加容易使用。在使用過程中對這個外觀類的例項的過程就是對子系統中各個類的例項的過程,同時外觀類的方法也是對子系統中各個類方法的分類呼叫。從而是子系統中大量的類和客戶端減少的大量的依賴,使得這個子系統的使用也更加容易簡單。

九、建造者模式

      它的作用在使用過程中定義希望建立物件的類,將這個類作為引數傳給指揮者,指揮者會按照它定義的方法和固定的過程來構件物件,最後再將生成的物件傳出去顯示。從而是這個複雜物件的建立和它的表示分離,同時由於針對的類不同則使得同樣的建造過程創建出不同的表示。

十、觀察者模式

       此模式可以使一個物件改變時同時改變其他物件,同時還可以根據需要增加和除去需要改變的物件看,即實現了多個觀察者物件同時監聽某一個主題物件,當這個主題物件發出通知時,其他的觀察者會發生相應的反應。在使用上其實是通過新增或除去觀察者到主題物件的一個列表中,當主題發出通知時,就會遍歷這個列表中的物件,讓所有的物件響應對應的方法(方法名一致,但是可以根據情況寫方法的內容)。