定义:将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作
类比:就像电源适配器,可以让不同国家的电器插头兼容你的插座
应用场景
- 需要使用一个现有的类,但它的接口与我们需要的不匹配
- 希望创建一个可复用的类,该类可以与其他不相关或不可预见的类(即接口不兼容的类)协同工作
优缺点
- 优点
- 缺点
- 代码复杂性增加,需要引入额外的适配器类
实现代码
// 目标接口,客户希望使用的接口
interface Target {
request(): string;
}
// 被适配者,一个有着不兼容接口的现有类
class Adaptee {
public specificRequest(): string {
return '.tseuqer cificepS';
}
}
// 适配器,将 Adaptee 的接口转换成 Target 的接口
class Adapter implements Target {
private adaptee: Adaptee;
constructor(adaptee: Adaptee) {
this.adaptee = adaptee;
}
public request(): string {
const result = this.adaptee.specificRequest().split('').reverse().join('');
return `Adapter: (TRANSLATED) ${result}`;
}
}
// 客户端代码
function clientCode(target: Target) {
console.log(target.request());
}
const adaptee = new Adaptee();
const adapter = new Adapter(adaptee);
clientCode(adapter);