设计模式之二:策略模式

先定义一个抽象方法类Strategy:

抽象算法类代码
1 /// <summary>
2 /// 抽象算法类
3 /// </summary>
4   abstract class Strategy
5 {
6 /// <summary>
7 /// 算法方法
8 /// </summary>
9 public abstract void AlgorithmInterface();
10 }

这个类中定义了一个抽象方法让子类重写具体的策略逻辑。

再定义三个具体算法类:

具体算法代码
1 /// <summary>
2 /// 具体算法A
3 /// </summary>
4 class ConcreteStrategyA : Strategy
5 {
6 /// <summary>
7 /// 算法A实现方法
8 /// </summary>
9 public override void AlgorithmInterface()
10 {
11 Console.WriteLine("算法A实现方法");
12 }
13 }
14
15 /// <summary>
16 /// 具体算法B
17 /// </summary>
18 class ConcreteStrategyB : Strategy
19 {
20 /// <summary>
21 /// 算法B实现方法
22 /// </summary>
23 public override void AlgorithmInterface()
24 {
25 Console.WriteLine("算法B实现方法");
26 }
27 }
28
29 /// <summary>
30 /// 具体算法C
31 /// </summary>
32 class ConcreteStrategyC : Strategy
33 {
34 /// <summary>
35 /// 算法C实现方法
36 /// </summary>
37 public override void AlgorithmInterface()
38 {
39 Console.WriteLine("算法C实现方法");
40 }
41 }

 

三个具体算法类都对基类的抽象方法进行重写,实现了各自策略对应的处理逻辑。

写一个实现具体算法的类Context:

Context代码
1 /// <summary>
2 /// 上下文
3 /// </summary>
4 class Context
5 {
6 Strategy strategy;
7 /// <summary>
8 /// 初始化时,传入具体的策略对象
9 /// </summary>
10 /// <param name="strategy">具体的策略对象</param>
11 public Context(Strategy strategy)
12 {
13 this.strategy = strategy;
14 }
15
16 /// <summary>
17 /// 上下文接口
18 /// </summary>
19 public void ContextInterface()
20 {
21 //根据具体的策略对象,调用其算法的方法。
22 strategy.AlgorithmInterface();
23 }
24 }

Context类中,ContextInterface方法的strategy对象是根据构造方法中传入的具体策略对象调用方法的。

和简单工厂模式一样,也是声明一个基类,用子类对其实例化。

客户端代码:

客户端代码
1 static class Program
2 {
3 /// <summary>
4 /// 应用程序的主入口点。
5 /// </summary>
6 static void Main(string[] args)
7 {
8 Context context;
9
10 context = new Context(new ConcreteStrategyA());
11 context.ContextInterface();
12
13 context = new Context(new ConcreteStrategyB());
14 context.ContextInterface();
15
16 context = new Context(new ConcreteStrategyC());
17 context.ContextInterface();
18
19 Console.Read();
20 }
21 }

posted on 2010-03-16 11:11  狐狸的尾巴  阅读(185)  评论(0)    收藏  举报

导航