推荐答案
// www.javascriptcn.com code example
// 目标接口
class Target {
request() {
return 'Target: The default target\'s behavior.';
}
}
// 需要适配的类
class Adaptee {
specificRequest() {
return '.eetpadA eht fo roivaheb laicepS';
}
}
// 适配器类
class Adapter extends Target {
constructor(adaptee) {
super();
this.adaptee = adaptee;
}
request() {
const result = this.adaptee.specificRequest().split('').reverse().join('');
return `Adapter: (TRANSLATED) ${result}`;
}
}
// 使用适配器
const adaptee = new Adaptee();
const adapter = new Adapter(adaptee);
console.log(adapter.request()); // 输出: Adapter: (TRANSLATED) Special behavior of the Adaptee.本题详细解读
适配器模式的定义
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类能够一起工作。适配器模式通过将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。
适配器模式的组成
- 目标接口(Target):这是客户端期望的接口,适配器需要实现这个接口。
- 需要适配的类(Adaptee):这是需要被适配的类,它通常具有客户端需要的功能,但接口与目标接口不兼容。
- 适配器类(Adapter):这是适配器模式的核心,它通过继承或组合的方式将Adaptee的接口转换为Target接口。
代码解析
- Target类:定义了一个
request方法,这是客户端期望的接口。 - Adaptee类:定义了一个
specificRequest方法,它的接口与Target不兼容。 - Adapter类:继承了Target类,并在内部持有一个Adaptee的实例。Adapter类的
request方法调用了Adaptee的specificRequest方法,并对其结果进行了处理,使其符合Target接口的要求。
使用场景
适配器模式通常用于以下场景:
- 当你需要使用一个已经存在的类,但其接口与你的代码不兼容时。
- 当你希望创建一个可复用的类,该类可以与多个不相关的类或不可预见的类协同工作时。
优点
- 提高了类的复用性。
- 增加了类的透明度。
- 灵活性好。
缺点
- 过多地使用适配器模式会使系统变得复杂,不易于理解。
- 适配器模式会增加代码的复杂性,尤其是在需要适配多个类时。