1. OO基礎(chǔ)
抽象
封裝
多態(tài)
繼承
2. OO原則
封裝變化
多用組合,少用繼承
針對接口編程,不針對實現(xiàn)編程
為交互對象之間的松耦合設(shè)計而努力
對擴展開放,對修改關(guān)閉
3. 設(shè)計模式
3.1 策略模式
<b>策略模式</b> 定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。
策略模式01.png
3.2 觀察者模式
<b>觀察者模式</b> 定義了一系列對象之間的一對多關(guān)系,當一個對象改變狀態(tài),其他依賴者都會收到通知,并自動更新。
觀察者模式01.png
1. 觀察者模式定義了對象之間一對多的關(guān)系;
2. 可觀察者用一個共同的接口來更新觀察者;
3. 觀察者和可觀察者之間用松耦合方式結(jié)合,可觀察者不知道觀察者的細節(jié),只知道觀察者實現(xiàn)了觀察者接口;
4. 使用此模式時,可以從被觀察者處推(push)或拉(pull)數(shù)據(jù);
5. 有多個觀察者時,不可以依賴特定的通知次序;
6. Java有多種觀察者模式的實現(xiàn),包括通用的java.util.Observable;
7. java.util.Observable的實現(xiàn)存在一些問題;
8. 可以考慮自己實現(xiàn)Observable;
9. 觀察者模式有大量的實際應(yīng)用場景,如:JavaBeans等;
3.3 裝飾者模式
<b>裝飾者模式</b> 動態(tài)地將責任附加到對象上。想要擴展功能,裝飾者提供有別于繼承的另一種選擇。
裝飾者模式01.jpg
1. 繼承屬于擴展形式之一,但不見得是達到彈性設(shè)計的最佳方式;
2. 在我們的設(shè)計中,應(yīng)該允許行為可以被擴展,而無須修改現(xiàn)有的代碼;
3. 組合和委托可用于在運行時動態(tài)地加上新的行為;
4. 除了繼承,裝飾者模式也可以讓我們擴展行為;
5. 裝飾者模式意味著一群裝飾者類,這些類用來包裝具體組件;
6. 裝飾者類反映出被裝飾的組件類型(實際上,他們具有相同的類型,都經(jīng)過接口或繼承實現(xiàn));
7. 裝飾者可以在被裝飾者的行為前面與/或后面加上自己的行為,甚至將被裝飾者的行為整個取代掉,而達到特定的目的;
8. 你可以用無數(shù)個裝飾者包裝一個組件;
9. 裝飾者一般對組件的客戶是透明的,除非客戶程序依賴于組件的具體類型;
10. 裝飾者會導(dǎo)致設(shè)計中出現(xiàn)許多小對象,如果過度使用,會讓程序變得很復(fù)雜;