【发布时间】:2010-01-09 17:49:21
【问题描述】:
反馈总结
我现在将关闭此广告(我认为不会有更多反馈)并尝试总结我的理解
- 使用“上下文”作为我的策略的参数会引入应该避免的紧密耦合,并且还可能迫使我公开可能应该隐藏在类中的属性。
- 为了最大程度地减少耦合,最好提供所需的值,或者至少使用接口而不是策略的具体类型。
我试图对策略模式有一个清晰的概述,并且我在问自己,让策略取决于上下文是一个好还是坏的设计。
我们来看看下面的经典实现
//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);
}
}
要避免这种“耦合”吗?还好吗?
【问题讨论】:
标签: design-patterns strategy-pattern