国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

(十二)適配器模式

2019-11-08 03:18:10
字體:
來源:轉載
供稿:網友

適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。

就像很多購買港版的電子設備一樣,直接買來是沒有辦法充電的,因為港版的插頭,全部都是那種很大的三孔的,大陸這邊有2空的,有小三孔的。所以在買電子設備的時候,最好再買一個轉換插頭,可以插在我們這邊的小插孔上,另一頭可以插上港版的那種大插頭(其實有那種通用的插排的,深圳比較多,因為深圳距離香港近……..)

適配器模式分類的適配器模式和對象的適配器模式兩種不同的形式。

類的適配器模式

這里寫圖片描述

如上圖,我現在有個接口,Targett,接口有2個方法methodA,methodB,有一個類Adaptee,只有一個methodA,這個時候就需要一個Adapter適配器,把他們關聯起來,

public interface Target { public void methodA(); public void methodB();}public class Adaptee { public void methodA(){ System.out.代碼比較簡單,就不啰嗦了。

對象的適配器模式

與類的適配器模式一樣,對象的適配器模式把被適配的類的API轉換成為目標類的API,與類的適配器模式不同的是,對象的適配器模式不是使用繼承關系連接到Adaptee類,而是使用委派關系連接到Adaptee類。

public class Adapter implements Target{ private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void methodA() { this.adaptee.methodA(); } @Override public void methodB() { System.out.println("methodB"); }}

類適配器和對象適配器的區別

類適配器使用對象繼承的方式,是靜態的定義方式;而對象適配器使用對象組合的方式,是動態組合的方式。

對于類適配器,由于適配器直接繼承了Adaptee,使得適配器不能和Adaptee的子類一起工作,因為繼承是靜態的關系,當適配器繼承了Adaptee后,就不可能再去處理 Adaptee的子類了。

對于對象適配器,一個適配器可以把多種不同的源適配到同一個目標。換言之,同一個適配器可以把源類和它的子類都適配到目標接口。因為對象適配器采用的是對象組合的關系,只要對象類型正確,是不是子類都無所謂。

對于類適配器,適配器可以重定義Adaptee的部分行為,相當于子類覆蓋父類的部分實現方法。

對于對象適配器,要重定義Adaptee的行為比較困難,這種情況下,需要定義Adaptee的子類來實現重定義,然后讓適配器組合子類。雖然重定義Adaptee的行為比較困難,但是想要增加一些新的行為則方便的很,而且新增加的行為可同時適用于所有的源。

對于類適配器,僅僅引入了一個對象,并不需要額外的引用來間接得到Adaptee。

對于對象適配器,需要額外的引用來間接得到Adaptee。

  建議盡量使用對象適配器的實現方式,多用合成/聚合、少用繼承。當然,具體問題具體分析,根據需要來選用實現方式,最適合的才是最好的。    適配器模式的優點   更好的復用性   系統需要使用現有的類,而此類的接口不符合系統的需要。那么通過適配器模式就可以讓這些功能得到更好的復用。

  更好的擴展性   在實現適配器功能的時候,可以調用自己開發的功能,從而自然地擴展系統的功能。

適配器模式的缺點   過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異于一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 两当县| 潞城市| 德江县| 盘山县| 清涧县| 临海市| 辽源市| 襄樊市| 黎平县| 泊头市| 延边| 琼结县| 曲水县| 商都县| 康平县| 琼海市| 新昌县| 玛纳斯县| 商南县| 南京市| 阿拉善左旗| 南澳县| 灵川县| 潜山县| 黄陵县| 吉林市| 宜丰县| 汽车| 富裕县| 平安县| 黑龙江省| 公主岭市| 九寨沟县| 呼和浩特市| 息烽县| 甘南县| 古田县| 白玉县| 大埔县| 元氏县| 巴林右旗|