Head First 设计模式
1,策略模式
定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。
oo基礎:抽象,封裝,多態,繼承
oo原則:封裝變化,多用組合,少用繼承,針對接口編程,不針對實現編程
oo模式:策略模式。
2,觀察者模式(Observer)
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,他的所有依賴者都會收到通知并自動更新。
優點:松耦合
00基礎:抽象
00原則:封裝變化,多用組合,少用繼承,針對接口編程,不針對實現編程,為交互對象之間的松耦合設計而努力,
00模式:觀察者模式
3,裝飾者模式
開放-關閉原則:類應該對擴展開放,對修改關閉。
裝飾著和被裝飾著對象有想通的超類型。
你可以用一個或者多個裝飾著包裝一個對象。
既然裝飾著和被裝飾對象有想通的超類型,所以在任何需要原始對象(被包裝的)的場合,可以用裝飾過的對象替代它。
裝飾著可以在所委托被裝飾著的行為之前與/或之后,加上自己的行為,以達到特定的目的。
對象可以在任何時候被裝飾,所以可以在運行時態的,不限量的用你喜歡的裝飾著來裝飾對象。
裝飾著模式:動態的將責任附加在對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
繼承是有了正確的類型,而不是繼承它的行為,行為來自裝飾者和基礎組件,或與其他裝飾者之間的組合關系。
例子:java的I/O流就是采用裝飾者模式
00原則:封裝變化,多用組合,少用繼承,針對接口編程,不針對實現編程,為交互對象之間的松耦合設計而努力,對擴展開放,對修改關閉
4,工廠方法模式
定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個,工廠方法讓類把實例化推遲到子類。
簡單工廠與工廠方法的區別:簡單工廠把全部的事情,在一個方法都處理完了,然而工廠方法卻是創建一個框架,讓子類決定要如何實現。
優點:將創建對象的代碼集中在一個對象或者方法中,可以避免代碼中的重復,并且更方便以后的維護,這也意味著客戶在實例化對象時,只會依賴于接口,而不是具體類,讓代碼更具有彈性。
依賴倒置原則:要依賴抽象,不要依賴具體類。
變量不可以持有具體類的引用。不要讓類派生自具體類。不要覆蓋基類中已實現的方法。
4.1,抽象工廠模式(不懂)
提供一個接口,用于創建相關或者依賴對象的家族,而不需要明確指定具體類。
工廠方法與抽象工廠區別:都是為了創建對象。工廠方法用的方法是繼承,抽象用的是對象組合。工廠方法創建對象需要擴展一個類,并覆蓋它的工廠方法。通過子類來創建對象。抽象工廠提供一個用來創建一個產品家族的抽象類型,這個類型的子類定義了產品被產生的方法,要想使用這個工廠必須先實例化它,然后將它傳入一些針對抽象類型所寫的代碼中。
5,單件模式
確保一個類只有一個實例,并提供一個全局訪問點。
多線程問題是那種解決方法:
(1)同步getInstance()方法
(2)使用急切創建實例
(3)雙重檢查加鎖?
?
6,命令模式
將“請求”封裝成對象,以便使用不同的請求,隊列或者日志來參數化其他對象,命令模式也支持可撤銷的操作。
命令模式的用途:隊列請求,日志請求,
7,適配器模式
將一個類的接口,轉換成客戶期望的另一個接口,適配器讓原本接口不可兼容的類可以合作無間。
適配器分為兩種:對象適配器(組合)和類適配器(繼承)
7.1外觀模式
提供了一個統一的接口,用來訪問子系統中的一群接口,外觀定義了一個高層接口,讓子系統更容易使用(讓接口更簡單)。
?
外觀模式并沒有封裝子系統,如有需要還是可以直接訪問子系統的接口。
外觀不只是簡化了接口,也將客戶從組件的子系統中解耦。
外觀和適配器可以包裝許多類,但是外觀的意圖是簡化接口,而適配器的意圖是將接口轉換成不同接口
最少知識原則:只和你的密友談話。
8,模板方法模式
在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
用途:排序,數組的排序就采用了模板方法模式,InputStream類的一個read()方法也是模板方法模式
9,迭代器模式
提供一種方法順序訪問一個聚合對象的各個元素,而又不暴露其內部的表示。
9.1組合模式(沒懂)
允許你將對象組合成樹形結構來表現“整體/部分”層次結構,組合能讓客戶以一直的方式處理個別對象以及對象組合。
10,狀態模式
允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類。
?
11,代理模式
為另一個對象提供一個替身或者占位符以控制對這個對象的訪問。
使用代理模式創建代表對象,讓代表對象控制某對象的訪問,被代理的對象可以是遠程的對象,創建開銷大的對象或需要安全控制的對象。
11.1遠程代理
遠程代理可以作為另一個JVM上對象的本地代表,調用代理的方法,會被代理利用網絡轉發到遠程執行,并且結果會通過網絡返回給代理,再由代理將結果轉給客戶。(理解:就像駐場代表,傳達客戶與自己公司的意思。)
11.2 虛擬代理
虛擬代理作為創建開銷大的對象的代表,虛擬代理經常直到我們真正需要一個對象的時候才創建它,當對象在創建錢和創建中時,由虛擬代理來扮演對象的替身,對象創建后,代理就會將請求直接委托給對象。
11.3動態代理
動態代理之所以稱為動態,是因為運行時才將它的類創建出來,代碼開始執行時,還沒有proxy類,它是根據需要從你傳入的接口集創建的。
InvocationHandler不是代理類,只是幫助proxy的類。
代理類有一個靜態方法,叫做isProxyClass(),這個方法的返回值如果是true,就表示這是一個動態代理類。
11.4防火墻代理
控制網絡資源的訪問,保護主題免于“壞客戶”的侵害。
11.5只能引用代理
當主題被引用時,進行額外的動作,例如計算一個對象唄引用次數。
11.6緩存代理
為開銷大的運算結果提供暫時儲存,它也允許多個客戶共享結果,以減少計算或網絡延遲。
11.7同步代理
在多線程的情況下為主題提供安全的訪問。
11.8復雜隱藏代理
用來隱藏一個類的復雜幾個的復雜度,并進行訪問控制,
11.9寫入時復制代理
用來控制對象的復制,方法是延遲對象的復制,知道客戶真的需要為止。
12復合模式
復合模式結合兩個或以上的模式,組成一個解決方案,解決一再發生的一般性問題。
MVC是復合模式,結合了觀察者模式,策略模式和組合模式。
模型使用觀察者模式,以便觀察者更新,同事保持兩者之間的解耦。
控制器是視圖的策略,視圖可以使用不用的控制器實現,得到不同的行為。
視圖使用組合模式實現用戶界面,用戶界面通常組合了嵌套的組件,像面板,框架和按鈕。
適配器模式用來將新模型適配成已有的視圖和控制器。
13
模式是在某情景下,針對某問題的某種解決方案。
?
?
總結
以上是生活随笔為你收集整理的Head First 设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作55:对v-model的理解
- 下一篇: asp.net ajax控件工具集 Au