1. OO基礎(chǔ)
抽象
封裝
多態(tài)
繼承
2. OO原則
封裝變化
多用組合锋边,少用繼承
針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程
為交互對(duì)象之間的松耦合設(shè)計(jì)而努力
對(duì)擴(kuò)展開放尊勿,對(duì)修改關(guān)閉
3. 設(shè)計(jì)模式
3.1 策略模式
<b>策略模式</b> 定義了算法族僧凤,分別封裝起來,讓它們之間可以互相替換元扔,此模式讓算法的變化獨(dú)立于使用算法的客戶拼弃。
3.2 觀察者模式
<b>觀察者模式</b> 定義了一系列對(duì)象之間的一對(duì)多關(guān)系,當(dāng)一個(gè)對(duì)象改變狀態(tài)摇展,其他依賴者都會(huì)收到通知吻氧,并自動(dòng)更新。
1. 觀察者模式定義了對(duì)象之間一對(duì)多的關(guān)系咏连;
2. 可觀察者用一個(gè)共同的接口來更新觀察者盯孙;
3. 觀察者和可觀察者之間用松耦合方式結(jié)合,可觀察者不知道觀察者的細(xì)節(jié)祟滴,只知道觀察者實(shí)現(xiàn)了觀察者接口振惰;
4. 使用此模式時(shí),可以從被觀察者處推(push)或拉(pull)數(shù)據(jù)垄懂;
5. 有多個(gè)觀察者時(shí)骑晶,不可以依賴特定的通知次序痛垛;
6. Java有多種觀察者模式的實(shí)現(xiàn),包括通用的java.util.Observable桶蛔;
7. java.util.Observable的實(shí)現(xiàn)存在一些問題匙头;
8. 可以考慮自己實(shí)現(xiàn)Observable;
9. 觀察者模式有大量的實(shí)際應(yīng)用場(chǎng)景仔雷,如:JavaBeans等蹂析;
3.3 裝飾者模式
<b>裝飾者模式</b> 動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。想要擴(kuò)展功能碟婆,裝飾者提供有別于繼承的另一種選擇电抚。
1. 繼承屬于擴(kuò)展形式之一,但不見得是達(dá)到彈性設(shè)計(jì)的最佳方式竖共;
2. 在我們的設(shè)計(jì)中蝙叛,應(yīng)該允許行為可以被擴(kuò)展,而無須修改現(xiàn)有的代碼公给;
3. 組合和委托可用于在運(yùn)行時(shí)動(dòng)態(tài)地加上新的行為借帘;
4. 除了繼承,裝飾者模式也可以讓我們擴(kuò)展行為妓布;
5. 裝飾者模式意味著一群裝飾者類姻蚓,這些類用來包裝具體組件宋梧;
6. 裝飾者類反映出被裝飾的組件類型(實(shí)際上匣沼,他們具有相同的類型,都經(jīng)過接口或繼承實(shí)現(xiàn))捂龄;
7. 裝飾者可以在被裝飾者的行為前面與/或后面加上自己的行為释涛,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的倦沧;
8. 你可以用無數(shù)個(gè)裝飾者包裝一個(gè)組件唇撬;
9. 裝飾者一般對(duì)組件的客戶是透明的,除非客戶程序依賴于組件的具體類型展融;
10. 裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象窖认,如果過度使用,會(huì)讓程序變得很復(fù)雜告希;