適配器模式是結構型設計模式之一, 用于將一個類的接口轉換成客戶期望的另一個接口. 通過使用適配器模式, 原本由于接口不兼容而無法一起工作的類可以協同工作
適配器模式通常有兩種實現方式
- 類適配器模式 (Class Adapter Pattern): 使用繼承來實現適配器。
- **對象適配器模式 (Object Adapter Pattern) **: 使用組合來實現適配器。
適配器模式結構
- 目標接口: 當前系統業務所期待的接口, 可以是抽象類也可以是接口
- 適配者類: 它是被訪問和適配的現存組件庫中的組件接口
- 適配器類: 它是一個轉換器, 通過繼承或引用適配者的對象, 把適配者接口轉換成目標接口, 讓客戶按目標接口的格式訪問適配者
適配器模式實現
- 類適配器模式
類適配器模式通過繼承目標接口和被適配類, 實現適配功能
// 目標接口
interface Target {void request();
}// 被適配者類
class Adaptee {void specificRequest() {System.out.println("Adaptee's specific request");}
}// 類適配器
class ClassAdapter extends Adaptee implements Target {public void request() {specificRequest();}
}// 客戶端代碼
public class Client {public static void main(String[] args) {Target target = new ClassAdapter();target.request();}
}
- 對象適配器模式
對象適配器模式通過組合的方式, 將被適配者類的實例作為適配器的一個字段, 并在適配器中調用被適配者的方法
// 目標接口
interface Target {void request();
}// 被適配類
class Adaptee {void specificRequest() {System.out.println("Adaptee's specific request");}
}// 對象適配器
class ObjectAdapter implements Target {private Adaptee adaptee;public ObjectAdapter(Adaptee adaptee) {this.adaptee = adaptee;}public void request() {adaptee.specificRequest();}
}public class Client {public static void main(String[] args) {Adaptee adaptee = new Adaptee();Target target = new ObjectAdapter();target.request();}
}
優點:
- 分離接口和實現: 適配器模式將客戶端和被適配者類的接口分離開, 通過適配器類進行轉換, 增強了代碼的靈活性和可維護性
- 復用現有類: 通過適配器模式, 可以復用現有的類, 而不需要修改其代碼, 從而滿足新的需求
缺點
- 復雜性增加: 使用適配器模式會增加系統的復雜性, 尤其是需要同時適配多個類時, 可能需要大量的適配器類
- 性能開銷: 適配器模式會引入額外的接口調用開銷, 可能會對性能產生一定的影響