1、模式說明設計模式
在現實生活中,當須要將兩種設備鏈接起來,可是兩個設備的接口規範又不一致(好比電腦上只有Type-C接口,可是你的顯示器是HDMI接口),這時候就須要一個適配器,適配器一端鏈接電腦,一端鏈接屏幕。有了這個適配器,咱們不須要從新買HDMI接口電腦的電腦,就能夠達到咱們鏈接外置顯示器的目的。app
在程序設計領域,不少時候咱們的工做是在現有類的基礎上繼續開發的,若是這個類已經實現了咱們要的功能且該類通過充分測試(修改它可能會引入bug),可是接口不符合當前程序環境規範,須要適當轉換,這時就用到了Adapter模式的設計思想,建立一個Adapter適配器(Wrapper包裝器),使原有的類能適應新的程序環境。ide
2、模式分類測試
Adapter模式有如下兩種:this
3、適配器模式中的角色spa
4、代碼示例設計
使用繼承的類適配器:3d
TypeCVideo類(Adaptee):code
package com.designpattern.cn.adapterpattern; public class TypeCVideo { private String videoContent; public TypeCVideo(String videoContent){ this.videoContent = videoContent; } public void typecOut(){ System.out.println(videoContent); } }
ShowHdmiVideo類(Target對象):視頻
package com.designpattern.cn.adapterpattern; public interface ShowHdmiVideo { public abstract void HdmiOut(); }
TypeCToHdmiCable類(Adapter類):
package com.designpattern.cn.adapterpattern; /** * <p>TypeCToHdmiCable TypeC轉HDMI線 適配器類</p> */ public class TypeCToHdmiCable extends TypeCVideo implements ShowHdmiVideo { //TypeC轉HDMI線 TypeCToHdmiCable類繼承了TypeCVideo類 public TypeCToHdmiCable(String videoContent){ super(videoContent);//設置父類的視頻內容videoContent字段 } @Override public void HdmiOut() { typecOut(); } }
測試運行結果:
上面的例子,經過繼承TypeCVideo的方式建立新的類,並實現新業務須要的HDMI接口,從而將TypeC中視頻流(Video Streaming字符串)從HDMI接口輸出處來。
使用委託的對象適配器模式:
【委託:委託的意思就是交給他人,本身由於某些緣由作不了的事情,將事情吩咐給別人作,在JAVA中,委託就是將某個方法中的實際處理交給其餘實例的方法】
將上述ShowHdmiVideo接口改成ShowHdmiVideo類:
package com.designpattern.cn.adapterpattern; public abstract class ShowHdmiVideo{ public abstract void HdmiOut(); }
TypeCToHdmi適配器類修改以下:
package com.designpattern.cn.adapterpattern; /** * <p>TypeCToHdmiCable TypeC轉HDMI線 適配器類</p> */ public class TypeCToHdmiCable extends ShowHdmiVideo { private TypeCVideo typeCVideo; public TypeCToHdmiCable(String videoContent){ this.typeCVideo = new TypeCVideo(videoContent); } //當適配器HDMI視頻輸出方法被調用的時候,並非TypeCToHdmiCable這個適配器類本身進行處理,而是交給了TypeCVideo類實例的typec輸出 public void HdmiOut() { typeCVideo.typecOut(); } }
其餘定義保持不變,再次運行程序,結果相同:
5、相關的設計模式: