你的位置:首页 > ASP.net教程

[ASP.net教程]【学习笔记1】——策略模式


一、定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

 

二、UML图:(来自百度百科

根据上面的UML图,我们需要的类有:

1)Content类

2)Strategy抽象类

3)若干ConcreteStrategy类

 

三、写法:

 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4  5 namespace StudyDesign 6 { 7   //抽像算法类 8   public abstract class Strategy 9   {10     //算法方法11     public abstract void AlgorithmInterface();12   }13  14 15 16   //具体算法A17   public class ConcreteStrategyA:Strategy18   {19     //算法实现20     public override void AlgorithmInterface()21     {22      Console.WriteLine("算法实现A"); 23     }24   }25 26 27   //具体算法B28   public class ConcreteStrategyB:Strategy29   {30     public override void AlgorithmInterface()31     {32       Console.WriteLine("算法实现B"); 33     }34   }35 36 37   //具体算法C38   public class ConcreteStrategyC:Strategy39   {40     public override void AlgorithmInterface()41     {42       Console.WriteLine("算法实现C");43     }44   }45 46 47 48  49   public class Content50   {51     private Strategy strategy;52 53     public Content(Strategy strategy) //构造函数54     {55       this.strategy = strategy;56     }57    58     public void ContentInterface() //方法59     {60       strategy.AlgorithmInterface();61     }62   }63 64 }

 

四、调用:

 Content content; content=new Content(new ConcreteStrategyA()); content.ContentInterface(); content=new Content(new ConcreteStrategyB()); content.ContentInterface(); content=new Content(new ConcreteStrategyC()); content.ContentInterface();

 

五、特点:

1. 所有这些算法完成的都是相同的工作。只是实现不同。

2. 不用在一个大程序里if...else...了,频繁改动大程序还有风险

3. 调用者必须知道有哪些算法