小编Fre*_*ata的帖子

在策略模式中,策略可以将Context作为参数


反馈摘要

我现在将关闭这个(我想没有更多的反馈),并试着总结一下我的理解

  1. 使用"Context"作为我的策略的参数引入了应该避免的紧密耦合,并且还可能迫使我暴露应该保留在类中的属性.
  2. 为了最小化耦合,最好提供所需的值或至少使用接口而不是具体类型的策略.

我正在努力清楚地了解战略模式,并且我问自己,策略取决于上下文是好还是坏.

让我们采取以下经典实现

//The strategy
interface IStrategy  
{  
  void Execute();  
}  

class ConcreteStrategyA : IStrategy
{
  public void Execute()
  {
    Console.WriteLine( "Called ConcreteStrategyA.Execute()" );
  }
}

class ConcreteStrategyB : IStrategy
{
  public void Execute()
  {
    Console.WriteLine( "Called ConcreteStrategyB.Execute()" );
  }
}

//The context
class Context
{
  IStrategy strategy;

  // Constructor
  public Context(IStrategy strategy)
  {
    this.strategy = strategy;
  }

  public void UpdateContext(IStrategy strategy)
  {
    this.strategy = strategy;
  }

  public void Execute()
  {
    strategy.Execute();
  }
}
Run Code Online (Sandbox Code Playgroud)

我见过的所有例子都有非常简单的策略,它们采用基本参数(例如整数).我想知道的是,如果策略使用Context来完成工作,那么是否存在问题.

它会给出类似的东西

//The …
Run Code Online (Sandbox Code Playgroud)

design-patterns strategy-pattern

10
推荐指数
2
解决办法
4615
查看次数

标签 统计

design-patterns ×1

strategy-pattern ×1