Skip to content

外观模式

外观模式(Facade Pattern) 是一种结构型设计模式,它为复杂的子系统提供一个统一的接口,使得子系统更容易使用。外观模式通过创建一个高层接口来隐藏系统的复杂性。

核心角色

  1. Facade(外观类):提供简化的接口,知道哪些子系统负责处理请求
  2. Subsystems(子系统类):实现子系统的功能,处理由外观类指派的任务
  3. Client(客户端):通过外观类来调用子系统的方法

代码示例:

typescript
class FileLoggerSystem {
  /**
   * 获取文件日志记录条数
   * @returns
   */
  public statistics() {
    return Math.floor(Math.random() * 1e3)
  }
}

class ImageLoggerSystem {
  /**
   * 获取图片日志记录条数
   * @returns
   */
  public statistics() {
    return Math.floor(Math.random() * 1e3)
  }
}

//使用外观模式简化获取所有日志的记录
class Facade {
  private fileService: FileLoggerSystem
  private imgService: ImageLoggerSystem
  constructor(fileService: FileLoggerSystem, imgService: ImageLoggerSystem) {
    this.fileService = fileService
    this.imgService = imgService
  }
  /**
   * 封装与子系统的交互
   * @returns any
   */
  public logStatics() {
    return {
      fileLoggers: this.fileService.statistics(),
      imgLoggers: this.imgService.statistics(),
    }
  }
}

console.log(
  '[  ] >',
  new Facade(new FileLoggerSystem(), new ImageLoggerSystem()).logStatics(),
)