什么是包装器?

42 阅读1分钟

包装器是一种通用的编程概念,指用一个对象或函数来封装另一个对象或函数,以提供额外的功能、修改其行为或适应不同的接口

假设我们有一个抽象类

 class Printer {
   print() {
     console.log("基础打印功能");
   }
 }

基于抽象类实现一个具体类

  class ConsolePrinter extends Printer {
    print() {
      console.log("在控制台打印内容");
    }
  }

我们想要一个类 可以基于 ConsolePrinter 做修改,在 console.log("在控制台打印内容"); 前打印 "这是新功能"

方法1:直接修改原来的类

如果有别的地方用到原来的类,会影响到原来的类 且需求修改的时候 这里要再次修改

方法2:写一个新类 重写里面的print方法

确实不会影响别的类 但是这里依旧是耦合的

方法3:使用包装器

解决上面的痛点

  1. 不耦合 灵活可维护
  2. 符合开闭原则:对扩展开放,对修改封闭

以下为代码实现

  class PrinterWrapper extends Printer {
    constructor(printer) {
      super(); // 调用父类构造函数
      this.wrappedPrinter = printer; // 保存被包装的对象
    }

    // 重写print方法,扩展功能
    print() {
      console.log("这是新功能");
      this.wrappedPrinter.print(); // 调用被包装对象的原始功能
  
    }
  }
  
  
    // 使用示例
  const consolePrinter = new ConsolePrinter();
  const wrappedPrinter = new PrinterWrapper(consolePrinter);


  consolePrinter.print();
  wrappedPrinter.print();