定义
- 提供一个统一的接口,用来访问子系统中的一群接口
- 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
类比:就像在餐馆点餐,只需要和服务员沟通就可以点到餐,而不需要了解厨房里的细节
应用场景
- 为一个复杂子系统提供一个简单的接口
- 解耦客户端和子系统之间的依赖关系
优缺点
- 优点
- 简化客户端对复杂系统的使用
- 减少客户端与子系统之间的依赖
- 缺点
- 增加了额外的封装层,可能会影响性能
实现代码
// 复杂子系统类
class Subsystem1 {
public operation1(): string {
return 'Subsystem1: Ready!';
}
public operationN(): string {
return 'Subsystem1: Go!';
}
}
class Subsystem2 {
public operation1(): string {
return 'Subsystem2: Get ready!';
}
public operationZ(): string {
return 'Subsystem2: Fire!';
}
}
// 外观类
class Facade {
protected subsystem1: Subsystem1;
protected subsystem2: Subsystem2;
constructor(subsystem1: Subsystem1, subsystem2: Subsystem2) {
this.subsystem1 = subsystem1;
this.subsystem2 = subsystem2;
}
public operation(): string {
let result = 'Facade initializes subsystems:\n';
result += this.subsystem1.operation1();
result += '\n';
result += this.subsystem2.operation1();
result += '\n';
result += 'Facade orders subsystems to perform the action:\n';
result += this.subsystem1.operationN();
result += '\n';
result += this.subsystem2.operationZ();
return result;
}
}
// 客户端代码
function clientCode(facade: Facade) {
console.log(facade.operation());
}
const subsystem1 = new Subsystem1();
const subsystem2 = new Subsystem2();
const facade = new Facade(subsystem1, subsystem2);
clientCode(facade);