跳到主要内容

简述Javascript 策略模式 ?

参考答案:

策略模式是一种行为设计模式,它允许你在运行时改变对象的行为。在JavaScript中,策略模式通常通过创建一系列策略对象来实现,每个策略对象封装了一种特定的算法或行为。这些策略对象可以被上下文对象使用,上下文对象在运行时根据需要选择使用哪个策略对象。

策略模式的关键在于将算法的使用与算法的实现分离。这意味着你可以在不改变使用算法的代码的情况下更换算法。这提供了更大的灵活性和可扩展性。

下面是一个简单的JavaScript策略模式的例子:

// 定义策略接口
interface Strategy {
  execute(): string;
}

// 创建具体策略对象
class ConcreteStrategyA implements Strategy {
  execute(): string {
    return 'Strategy A';
  }
}

class ConcreteStrategyB implements Strategy {
  execute(): string {
    return 'Strategy B';
  }
}

// 创建上下文对象
class Context {
  private strategy: Strategy;

  constructor(strategy: Strategy) {
    this.strategy = strategy;
  }

  setStrategy(strategy: Strategy) {
    this.strategy = strategy;
  }

  executeStrategy(): string {
    return this.strategy.execute();
  }
}

// 使用策略模式
const context = new Context(new ConcreteStrategyA());
console.log(context.executeStrategy()); // 输出 "Strategy A"

context.setStrategy(new ConcreteStrategyB());
console.log(context.executeStrategy()); // 输出 "Strategy B"

在这个例子中,我们定义了一个Strategy接口,它有一个execute方法。然后我们创建了两个实现这个接口的类ConcreteStrategyAConcreteStrategyB,它们分别实现了不同的算法。

然后,我们创建了一个Context类,它有一个strategy属性,这个属性是一个Strategy对象。Context类有一个executeStrategy方法,它调用strategy对象的execute方法。

最后,我们创建了一个Context对象,并设置它的strategy属性为ConcreteStrategyA的一个实例。然后我们调用executeStrategy方法,它执行了ConcreteStrategyAexecute方法。接着,我们更改了strategy属性为ConcreteStrategyB的一个实例,并再次调用executeStrategy方法,这次它执行了ConcreteStrategyBexecute方法。

这就是JavaScript中的策略模式。它允许你在运行时改变对象的行为,而不必改变使用这些对象的代码。