大綱:
- OO模式
- OO基礎(chǔ)
- OO原則
- Point
# OO模式
# OO基礎(chǔ)
- 抽象
- 封裝
- 多態(tài)
- 繼承
# OO原則
- 封裝變化
- 組合優(yōu)先繼承
使用組合更加靈活宝当,可以在運(yùn)行時(shí)替換行為庆揩,而如果是使用繼承。
行為則固定來(lái)自父類或子類跌穗。
- 針對(duì)接口編程
- 為交互對(duì)象之間的松耦合設(shè)計(jì)而努力
降低依賴
- 對(duì)擴(kuò)展開(kāi)發(fā)订晌,對(duì)修改關(guān)閉
# Point
- 知道OO基礎(chǔ),并不足以讓你設(shè)計(jì)出良好的OO系統(tǒng)蚌吸。
- 良好的OO設(shè)計(jì)必須具備可復(fù)用锈拨、可擴(kuò)充、可維護(hù)三個(gè)特性套利。
- 模式可以讓我們建造出具有良好OO設(shè)計(jì)質(zhì)量的系統(tǒng)推励。
- 模式被認(rèn)為是歷經(jīng)驗(yàn)證的OO設(shè)計(jì)經(jīng)驗(yàn) 鹤耍。
- 模式不是代碼,而是針對(duì)設(shè)計(jì)問(wèn)題的通用解決方案验辞。你可把它們應(yīng)用到特點(diǎn)的應(yīng)用中稿黄。
- 模式不是被發(fā)明,而是被發(fā)現(xiàn)跌造。
- 大多數(shù)的模式和原則杆怕,都著眼于軟件變化的主題。
- 大多數(shù)的模式都允許系統(tǒng)局部改變獨(dú)立于其他部分陵珍。
- 我們常把系統(tǒng)中會(huì)變化的部分抽出來(lái)封裝。
- 模式讓開(kāi)發(fā)人員之間有共享語(yǔ)言留潦,能夠最大化溝通的價(jià)值站削。
- 觀察者模式定義了對(duì)象之間一對(duì)多關(guān)系十偶。
- 主題
可觀察者
用一個(gè)共同的接口來(lái)更新觀察者 - 觀測(cè)者和可觀察者之間用松耦合方式結(jié)合
loosecoupl-ing
睦袖,可觀察者者不知道觀察者細(xì)節(jié)伦乔,只知道觀察者實(shí)現(xiàn)類觀察者接口。 - 使用此模式時(shí)恬试,你可以從被觀測(cè)者處推
push
或拉pull
數(shù)據(jù)。 - 有多個(gè)觀察者時(shí)幻馁,不可以依賴特定的通知序列甘凭。
- Java有多種觀察者模式的實(shí)現(xiàn)钩蚊,包括了通用的 java.util.Observable泛鸟。
- 要注意 java.util.Observable實(shí)現(xiàn)上所帶來(lái)的一些問(wèn)題刚操。
- 如果有必要的話,可以實(shí)現(xiàn)自己的Observable,這并不難构捡,不要害怕。
- Swing大量使用了觀察者模式喘帚,許多GUI框架也是如此。
- 此模式也被應(yīng)用在許多地方:JavaBeans陨瘩,RMI玫荣。
- 繼承屬于擴(kuò)展形式之一,但并不見(jiàn)得是達(dá)到彈性設(shè)計(jì)的最佳方式撵割。
- 在我們的設(shè)計(jì)中故硅,一個(gè)允許行為被擴(kuò)展往踢,而無(wú)需修改現(xiàn)有的代碼。
- 組合和委托可用于在運(yùn)行時(shí)動(dòng)態(tài)地加上新的行為。
- 除了繼承英支,裝飾者也可以讓我們擴(kuò)展行為干花。
- 裝飾者模式意味著一群裝飾者群肿仑,這些類用來(lái)包裝具體組件馏锡。
- 裝飾者類反應(yīng)出被裝飾者的組件類型 (事實(shí)上,他們具有相同的類型杯道,都經(jīng)過(guò)接口或繼承實(shí)現(xiàn))责蝠。
- 裝飾者可以在被裝飾者的行為前面 and 后面加上自己的行為党巾,升值將被裝飾者的行為整個(gè)取代掉齿拂,而達(dá)到特定的目的叹侄。
- 你可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件撒强。
- 裝飾者一般對(duì)組件的客戶是透明的琐凭,除非客戶程序依賴與組件的具體類型半抱。
- 裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象棉磨,如果過(guò)度使用江掩,會(huì)讓程序變得很復(fù)雜。