设计模式-外观模式

26 阅读1分钟

定义

外观模式,是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一组接口。

外观模式定义了一个高层接口,使得子系统更容易使用。通过门面模式,可以帮助客户端与复杂子系统之间解耦,只需要与门面对象交互即可。

UML 类图

typescript 实现

1. 定义一个或多个复杂子系统

class Subsystem1 {
  public operation1(): string {
    return `Subsystem1: Ready!\n";
  }
  public operationN(): string {
    return `Subsystem1: Go!\n";
  }
}

class Subsystem2 {
  public operation1(): string {
    return `Subsystem2: Ready!\n";
  }
  public operationZ(): string {
    return `Subsystem2: Fire!\n";
  }
}

2. 创建门面类

class Facade {
  protected subsystem1: Subsystem1;
  protected subsystem2: Subsystem2;
  
  constructor(subsystem1?: Subsystem1, subsystem2?: Subsystem2) {
    this.subsystem1 = subsystem1 || new Subsystem1();
    this.subsystem2 = subsystem2 || new Subsystem2();
  }
  public operation(): string {
    let result = `Facade initializaes subsystems:\n";
    result += this.subsystem1.operation1();
    result += this.subsystem2.operation1();
    result += 'Facade orders subsystems to perform the action:\n";
    result += this.subsystem1.operationN();
    result += this.subsystem2.operationZ();
    return result;
  }
}

3. 使用示例

function clientCode(facade: Facade) {
  console.log(facade.operation());
}

// 在客户端代码中使用门面模式
const subsystem1 = new Subsystem1();
const subsystem2 = new Subsystem2();
const facade = new Facade(subsystem1, subsystem2);
clientCode(facade);

通用实现