概述

   策略模式主要应用于多种方法解决一个问题中,或一个东西有多种做法,现在只选择其中一种方法,将来可能会用另一种方法。就像一道题有多种算法,需要把这些不同的算法封装起来,达到使用无差别化。
    策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

      设计

这个模式类似于Bridge模式,但是Bridge模式是为了封装实现部分,Strategy模式是为了封装某个步骤的多种算法。Strategy把这些算法抽象成一个类,直接使用其子类的对象实现具体的算法。

     实现

UML图:
我的设计模式学习--Strategy模式

 

意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
适用性
  • 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
  • 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式。
  • 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
  • 一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a t e g y 类中以代替这些条件语句。
Code Example
 1我的设计模式学习--Strategy模式// Strategy
 2我的设计模式学习--Strategy模式
 3我的设计模式学习--Strategy模式// Intent: "Define a family of algorithms, encapsultate each one, and make 
 4我的设计模式学习--Strategy模式// them interchangeable. Strategy lets the algorithm vary independently 
 5我的设计模式学习--Strategy模式// from clients that use it." 
 6我的设计模式学习--Strategy模式
 7我的设计模式学习--Strategy模式// For further information, read "Design Patterns", p315, Gamma et al.,
 8我的设计模式学习--Strategy模式// Addison-Wesley, ISBN:0-201-63361-2
 9我的设计模式学习--Strategy模式
10

还有一个示例代码为:

 1我的设计模式学习--Strategy模式using System;
 2我的设计模式学习--Strategy模式using System.Collections ;
 3我的设计模式学习--Strategy模式
 4我的设计模式学习--Strategy模式namespace Example
 5

相关文章:

  • 2022-02-25
  • 2022-02-03
  • 2022-12-23
  • 2021-07-21
  • 2021-12-28
  • 2021-06-29
  • 2021-07-26
  • 2022-12-23
猜你喜欢
  • 2022-03-11
  • 2021-08-13
  • 2021-08-19
  • 2021-11-21
  • 2021-12-10
  • 2021-09-05
相关资源
相似解决方案