設(shè)計模式: 適配器模式
定義:適配器模式將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口进倍。適配器讓原本接口不兼容的類可以合作無間。
這個模式可以通過創(chuàng)建適配器進行接口轉(zhuǎn)換,讓不兼容的接口變成兼容晓勇。這可以讓客戶從實現(xiàn)中解耦。如果在一段時間之后灌旧,我們想要改變接口,適配器可以將改變的部分封裝起來绰筛,客戶就不必為了應(yīng)對不同的接口而每次跟著修改枢泰。
對象和類的適配器
類適配器通過多重繼承實現(xiàn),對象適配器通過組合來實現(xiàn)铝噩。類適配器不是使用組合來適配被適配者衡蚂,而是繼承被適配者和目標(biāo)類。
- 對象適配器可以適配某個類和其子類骏庸,類適配器不用重新實現(xiàn)整個被適配者毛甲,也可以覆蓋其行為。
- 對象適配器具有更大的彈性具被,但是會有更多的子類玻募,一旦接口發(fā)生變更,對象適配器的改動更大
裝飾者和適配器
- 適配器“一定”會進行接口的轉(zhuǎn)換一姿,裝飾者則“不一定”七咧,裝飾者的意圖是擴展所包裝對象的行為或責(zé)任
設(shè)計模式:外觀模式
定義:外觀模式提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口叮叹。外觀定義了一個高層接口艾栋,讓子系統(tǒng)更容易使用。
外觀的意圖是提供一個簡單的接口蛉顽,好讓一個子系統(tǒng)更容易使用蝗砾。
設(shè)計原則
最少知識原則:只和你的密友交談
當(dāng)你正在設(shè)計一個系統(tǒng),不管是任何對象,你都要注意他所交互的類有哪些悼粮,并注意它和這些類是如何交互的拇泣。
這個原則希望我們在設(shè)計中,不要讓太多的類耦合在一起矮锈,免得修改系統(tǒng)中的一部分霉翔,會影響到其他部分。如果許多類之間相互依賴苞笨,那么這個系統(tǒng)就會變成一個易碎的系統(tǒng)债朵,他需要花許多成本維護,也因為太復(fù)雜而不容易被其他人了解瀑凝。
一些指導(dǎo)方針:在任何對象的方法內(nèi)序芦,我們應(yīng)該只調(diào)用屬于如下范圍的方法
- 該對象本身
- 被當(dāng)做方法參數(shù)傳進來的對象
- 此方法所創(chuàng)建或?qū)嵗萌魏螌ο?br> 這些方針告訴我們,如果某對象調(diào)用其他的方法返回結(jié)果粤咪,不要調(diào)用該對象的方法谚中。
- 對象的任何組件
把“組件“想象成 是被實例變量所引用的任何對象,換句話說寥枝,把這想象成是“有一個”(HAS—A)關(guān)系宪塔。
這個原則可以減少對象之間的依賴,減少軟件維護的成本囊拜,但采用這個原則也會導(dǎo)致更多的“包裝”類被制造出來某筐,以處理和其他組件的溝通,這可能會導(dǎo)致復(fù)雜度和開發(fā)時間的增加冠跷,并降低運行時性能南誊。
要點:
- 當(dāng)需要使用一個現(xiàn)有的類而其接口并不符合你的需要時,就使用適配器
- 當(dāng)需要簡化并統(tǒng)一一個很大的接口或者一群復(fù)雜的接口時蜜托,使用外觀
- 適配器改變接口以符合客戶的期望
- 外觀將客戶從一個復(fù)雜的子系統(tǒng)中解耦
- 實現(xiàn)一個適配器可能需要一番功夫抄囚,也可能不費功夫,視目標(biāo)接口的大小與復(fù)雜程度而定
- 實現(xiàn)一個外觀橄务,需要將子系統(tǒng)組合進外觀中幔托,然后將工作委托給子系統(tǒng)執(zhí)行
- 適配器有兩種形式:對象適配器和類適配器。類適配器需要用到多重繼承
- 你可以為一個子系統(tǒng)實現(xiàn)一個以上的外觀
- 適配器將一個對象包裝起來以改變其接口仪糖;裝飾者將一個對象包裝起來以增加新的行為和責(zé)任柑司;而外觀將一群對象“包裝“起來以簡化其接口