php適配器模式介紹
要點(diǎn):
1. 適配器模式主要應(yīng)用于“希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況”,在遺留代碼復(fù)用、類庫(kù)遷移等方面非常有用。
2. 適配器模式有對(duì)象適配器和類適配器兩種形式的實(shí)現(xiàn)結(jié)構(gòu),但是類適配器采用“多繼承”的實(shí)現(xiàn)方式,帶來(lái)了不良的高耦合,所以一般不推薦使用。對(duì)象適配器采用“對(duì)象組合”的方式,更符合松耦合精神。
實(shí)現(xiàn):
類的適配器模式結(jié)構(gòu)圖(繼承)
對(duì)象的適配器模式結(jié)構(gòu)圖(組合)
(對(duì)象適配器的代碼實(shí)現(xiàn))
Target:定義Client使用的與特定領(lǐng)域相關(guān)的接口
public interface Target { void request();}
Adaptee:現(xiàn)在需要適配的已經(jīng)存在的接口
public class Adaptee{ public void specificRequest(){}}
Adapter:對(duì)Adaptee 的接口與Target接口進(jìn)行適配
public class Adapter implements Target{ public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } private Adaptee adaptee;}
適用性:
1. 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。
2. 想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒(méi)有太大關(guān)聯(lián)的一些類,包括一些可能在將來(lái)引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。
3. (對(duì)對(duì)象適配器而言)在設(shè)計(jì)里,需要改變多個(gè)已有子類的接口,如果使用類的適配器模式,就要針對(duì)每一個(gè)子類做一個(gè)適配器,而這不太實(shí)際。
效果及優(yōu)缺點(diǎn):
對(duì)于類適配器:
1. 用一個(gè)具體的Adapter類對(duì)Adaptee和Taget進(jìn)行匹配。結(jié)果是當(dāng)我們想要匹配一個(gè)類以及所有它的子類時(shí),類Adapter將不能勝任工作。
2. 使得Adapter可以override(重定義) Adaptee的部分行為,因?yàn)锳dapter是Adaptee的一個(gè)子類。
對(duì)于對(duì)象適配器:
1. 允許一個(gè)Adapter與多個(gè)Adaptee,即Adaptee本身以及它的所有子類(如果有子類的話)同時(shí)工作。Adapter也可以一次給所有的Adaptee添加功能。
2. 使得override(重定義)Adaptee的行為比較困難。如果一定要override Adaptee的方法,就只好先做一個(gè)Adaptee的子類以override Adaptee的方法,然后再把這個(gè)子類當(dāng)作真正的Adaptee源進(jìn)行適配。
相關(guān)文章
php Notice: Undefined index 錯(cuò)誤提示解決方法
字面意思就是未定義的索引,一般情況下是因?yàn)槌绦蜷_(kāi)發(fā)作者判斷不嚴(yán)謹(jǐn)導(dǎo)致。一般不會(huì)影響程序的運(yùn)行,具體的解決方法可以參考下。2010-08-08
公司業(yè)務(wù)有一個(gè)常駐后臺(tái)運(yùn)行的守護(hù)進(jìn)程。在這個(gè)守護(hù)進(jìn)程當(dāng)中使用了 Redis List 結(jié)構(gòu)保存業(yè)務(wù)數(shù)據(jù)進(jìn)行隊(duì)列消費(fèi)。結(jié)果運(yùn)行過(guò)程中,有時(shí)候半個(gè)月,有時(shí)候幾個(gè)月就會(huì)突然不再消費(fèi)隊(duì)列里面的數(shù)據(jù)。我們發(fā)現(xiàn)進(jìn)行心中檢測(cè)之后,程序的穩(wěn)定性大大提高。2021-06-06
WordPress開(kāi)發(fā)中用于標(biāo)題顯示的相關(guān)函數(shù)使用解析
這篇文章主要介紹了WordPress開(kāi)發(fā)中用于標(biāo)題顯示的相關(guān)函數(shù)使用解析,講解了single_cat_title函數(shù)和get_the_title函數(shù)和the_title函數(shù)的用法,需要的朋友可以參考下2016-01-01
PHP簡(jiǎn)單實(shí)現(xiàn)遍歷目錄下特定文件的方法小結(jié)
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)遍歷目錄下特定文件的方法,結(jié)合2個(gè)簡(jiǎn)單實(shí)例總結(jié)分析了php針對(duì)目錄下指定文件的遍歷查詢操作技巧,需要的朋友可以參考下2017-05-05
PHP設(shè)計(jì)模式之裝飾器模式實(shí)例詳解
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾器模式,簡(jiǎn)單介紹了裝飾器模式的概念、功能并結(jié)合實(shí)例形式詳細(xì)分析了php實(shí)現(xiàn)與使用裝飾器模式的相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
php實(shí)現(xiàn)36進(jìn)制與10進(jìn)制轉(zhuǎn)換功能示例
這篇文章主要介紹了php實(shí)現(xiàn)36進(jìn)制與10進(jìn)制轉(zhuǎn)換功能,結(jié)合實(shí)例形式分析了php數(shù)值運(yùn)算與字符串操作的相關(guān)技巧,需要的朋友可以參考下2017-01-01
smarty內(nèi)置函數(shù){loteral}、{ldelim}和{rdelim}用法實(shí)例
這篇文章主要介紹了smarty內(nèi)置函數(shù){loteral}、{ldelim}和{rdelim}用法,實(shí)例分析了{(lán)loteral}、{ldelim}和{rdelim}的功能及使用技巧,需要的朋友可以參考下2015-01-01



