设计模式笔记 22. Strategy 策略模式(行为型模式)
2008-09-24 18:42
441 查看
22. Strategy 策略模式
2008-09-24
动机(Motivation)
在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。
如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?
意图(Intent)
定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。 ——《设计模式》GoF
如果除去Context类,这个模式几乎跟模板方法一样,可以看到,策略模式只是比模板方法模式多了一个Context类这个包装器。
//抽象算法类
abstract class Strategy
//具体算法A
class ConcreteStrategyA : Strategy
//具体算法B
class ConcreteStrategyB : Strategy
//具体算法C
class ConcreteStrategyC : Strategy
//上下文
class Context
class Program
{
static void Main(string[] args)
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
}
Strategy的几个要点:
Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。
Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。
与State类似,如果Strategy对象没有实例变量,那么各个上下文可以共享同一个Strategy对象,从而节省对象开销。
2008-09-24
动机(Motivation)
在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。
如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?
意图(Intent)
定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。 ——《设计模式》GoF
如果除去Context类,这个模式几乎跟模板方法一样,可以看到,策略模式只是比模板方法模式多了一个Context类这个包装器。
//抽象算法类
abstract class Strategy
//具体算法A
class ConcreteStrategyA : Strategy
//具体算法B
class ConcreteStrategyB : Strategy
//具体算法C
class ConcreteStrategyC : Strategy
//上下文
class Context
class Program
{
static void Main(string[] args)
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
}
Strategy的几个要点:
Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。
Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。
与State类似,如果Strategy对象没有实例变量,那么各个上下文可以共享同一个Strategy对象,从而节省对象开销。
相关文章推荐
- [设计模式笔记]三. 行为型模式--23. Strategy模式(策略)对象行为型模式(一)
- 设计模式之行为型模式(责任链、命令、解释器、迭代式、仲裁者、备忘录、观察者、状态、策略、模板方法、访问者)
- "围观"设计模式(20)--行为型之策略模式(Strategy Pattern)
- 设计模式-策略模式学习笔记
- 设计模式之禅笔记-策略模式
- PHP 设计模式 笔记与总结(8)策略模式
- 设计模式学习笔记(14)——策略模式
- 设计模式笔记(21)---备忘录模式(行为型)
- 学习Java 23种设计模式详解笔记之行为型模式(三)
- 设计模式笔记——策略模式
- 设计模式学习笔记——策略模式
- 设计模式笔记(24)---访问者模式(行为型)
- 设计模式笔记 16. Mediator 中介者模式(行为型模式)
- 菜鸟笔记之JAVA设计模式——策略模式的一点理解
- 设计模式 (一)——策略模式(Strategy,行为型)
- Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口
- 设计模式(2) 策略模式--行为型
- 步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
- 学习笔记:11种行为型设计模式简单对比
- 再起航,我的学习笔记之JavaScript设计模式20(策略模式)