要想正確理解設(shè)計(jì)模式,首先必須明確它是為了解決什么問(wèn)題而提出來(lái)的。
設(shè)計(jì)模式學(xué)習(xí)筆記
——Shulin
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/zhshulin
橋接模式的定義:"將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化"。
橋接模式是所有面向?qū)ο竽J降幕A(chǔ),通過(guò)對(duì)橋接模式的學(xué)習(xí)來(lái)理解設(shè)計(jì)模式的思想。理由如下:
1、它教導(dǎo)如何思考抽象,這是面向?qū)ο笤O(shè)計(jì)模式的關(guān)鍵概念。
2、它實(shí)現(xiàn)了基本的OOD原則。
3、它容易理解。
4、如果正確理解該模式,學(xué)習(xí)其他模式會(huì)很容易。
假設(shè)以下場(chǎng)景:
我們房間里有些電器(電燈,風(fēng)扇等)。這些設(shè)備按照某些方式布局,并由開(kāi)關(guān)控制。任何時(shí)候你都能替換或排查一個(gè)電器而不用碰到其他東西。例如,你可以換一個(gè)電燈而不需要換開(kāi)關(guān)。同樣,你可以換一個(gè)開(kāi)關(guān)或排查它而不需要碰到或替換相應(yīng)的電燈或風(fēng)扇;甚至你可以用把電燈連接到風(fēng)扇的開(kāi)關(guān)上,把風(fēng)扇連到電燈的開(kāi)關(guān)上,而不需要碰到開(kāi)關(guān)。
當(dāng)不同東西聯(lián)系在一起時(shí),它們應(yīng)該按照一定方式聯(lián)系:修改或替換一個(gè)系統(tǒng)時(shí)不會(huì)影響到另一個(gè),或者說(shuō)即便有,也應(yīng)該最小化。這能夠讓你的系統(tǒng)易于管理,且成本低。
把電燈/風(fēng)扇和開(kāi)關(guān)聯(lián)系到一起的是電線(xiàn)和電器布局。我們可以它們看做不同系統(tǒng)間相互聯(lián)系的橋梁。其基本的思想是,一個(gè)事物不能和另一外一個(gè)事物直接聯(lián)系。它們應(yīng)當(dāng)通過(guò)某些橋梁或接口聯(lián)系在一起。用軟件術(shù)語(yǔ)來(lái)說(shuō),這叫“松耦合”。
例子中我們有開(kāi)關(guān),可能有幾種開(kāi)關(guān),如普通的開(kāi)關(guān),漂亮的開(kāi)關(guān),但通常來(lái)說(shuō)它們還是開(kāi)關(guān),并且每種開(kāi)關(guān)都能夠打開(kāi)和關(guān)閉。
所以下面我們會(huì)有一個(gè)開(kāi)關(guān)的父類(lèi)Switch:
[java] view plain copy PRint?public class Switch { public void On() { } public void Off(){ } }
接下來(lái)我們會(huì)有其他的具體的開(kāi)關(guān)來(lái)繼承這個(gè)父類(lèi),他們都各自有自己的特征和行為,當(dāng)然最基本的就是開(kāi)、關(guān),如:
[java] view%20plain copy print?public class FancySwitch extends Switch { public void on(){ System.out.println("打開(kāi)開(kāi)關(guān)!!!!"); } public void off(){ System.out.println("關(guān)閉開(kāi)關(guān)!!!!"); } } [java] view%20plain copy print?
public class NormalSwitch extends Switch { public void on(){ System.out.println("打開(kāi)開(kāi)關(guān)!!!!"); } public void off(){ System.out.println("關(guān)閉開(kāi)關(guān)!!!!"); } }
對(duì)于電燈和電扇等具體的電器,根據(jù)OODP的開(kāi)放閉合原則,我們知道只要可能,就應(yīng)該嘗試抽象
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注