设计模式--策略模式

策略模式

概念:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

代码:

1 //抽象算法类
2 abstract class Strategy
3 {
4   //算法方法
5   public abstract void AlgorithmInterface();
6 }
//具体算法A
class ConcreteStrategyA:Strategy
{
        //算法A实现方法
        pulibc ovveride void AlgorithmInterface()
        {
            Console.WriteLine("算法A实现");
        }
}
1 //具体算法B
2 class ConcreteStrategyB:Strategy
3 {
4         //算法A实现方法
5         pulibc ovveride void AlgorithmInterface()
6         {
7             Console.WriteLine("算法B实现");
8         }
9 }
1 //具体算法C
2 class ConcreteStrategyC:Strategy
3 {
4         //算法A实现方法
5         pulibc ovveride void AlgorithmInterface()
6         {
7             Console.WriteLine("算法C实现");
8         }
9 

 

 1 //上下文
 2 
 3 Class Context
 4 {
 5   Strategy strategy;
 6   public Context(Strategy strategy)
 7   {  
 8     this.strategy=strategy;
 9   }
10   public void ContextInterface()
11   {
12     strategy.AlgorithmInterface();
13   }
14 }

客户端代码

1 客户端代码
2 static void Main(string[] args)
3 {
4   Context context;
5   context=new Context(new ConcreteStrageA());
6   context.ContextInterface();
7 }

 

结构图:

 

优点:减少了各种算法类与使用算法类之间的耦合,解决了简单工厂模式中维护或扩展算法必须改动工厂方法类的缺点;简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

缺点:选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象

posted on 2014-06-03 13:58  BKYJungle  阅读(115)  评论(0)    收藏  举报