反馈总结
我现在将关闭此标题(我认为不会有更多反馈)并尝试总结我所理解的内容
- 使用“上下文”作为我的策略的参数引入了应该避免的紧密耦合,并且还可能迫使我公开可能应该隐藏在类中的属性。
- 为了最小化耦合,最好为策略提供所需的值或至少使用接口而不是具体类型。
我试图对策略模式有一个清晰的概述,并且我在问自己,让策略取决于上下文是一个好还是坏的设计。
让我们采取以下经典实现
//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();
}
}
我见过的所有示例都有非常简单的策略,它们采用基本参数(例如整数)。我想知道的是,如果策略使用 Context 来完成工作,是否有问题。
它会给出类似的东西
//The strategy
interface IStrategy
{
void Execute(Context arg);
}
并且调用会给出
//The context
class Context
{
....
public void Execute()
{
strategy.Execute(this);
}
}
这种“耦合”要避免吗?可以吗?