前言
設計模式系列代碼均持續(xù)更新在我的gitHub:to github
I. 適配器模式工作原理
- 將一個類的接口轉換成另一種接口炉爆,讓原本接口不相兼容的類可以兼容(例如生活中的USB轉外接屏幕的轉接器 - USB 轉 HDMI等 )
- 從用戶的角度來看刀诬,被適配類是看不見的七问,是解耦合的
- 用戶調用適配器轉換出來的接口方法,由適配器去調用被適配者的相應接口方法
II. 適配器模式分類
- 類適配器
- 對象適配器
- 接口適配器
III. 類適配器模式的類圖
類圖
IV. 類適配器模式代碼
完整代碼 github
- 部分代碼
public class Adapter extends Laptop implements TransferLine {
public Adapter() {
provideHDMI();
}
public String provideHDMI() {
setPort("HDMI");
return getPort();
}
}
V. 對象適配器模式
- 對象適配器模式相對于類適配器模式就是將繼承關系轉為組合關系, 更為符合 合成復用原則
public class Adapter implements TransferLine {
private Laptop laptop;
public Adapter(Laptop laptop) {
this.laptop = laptop;
}
public String provideHDMI() {
if (laptop != null) {
laptop.setPort("HDMI");
}
return laptop.getPort();
}
}
VI. 接口適配器模式
- 當我們僅需要使用某個接口中的某一個方法時卢肃,可以使用接口適配器模式
public interface AdapterInterface {
void fun1();
void fun2();
void fun3();
void fun4();
}
/* 以默認方式實現(xiàn)接口所有方法 */
public abstract class AbstractAdapter implements AdapterInterface {
public void fun1() {}
public void fun2() {}
public void fun3() {}
public void fun4() {}
}
/* 不想實現(xiàn)所有接口時,只需實現(xiàn)我們想要的方法就好 */
public class Client {
public static void main(String[] args) {
new AbstractAdapter(){
@Override
public void fun1() {
System.out.println("=== 接口適配器 ===");
}
};
}
}