冯超

好好工作,天天向上

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

8        Strategy模式

8.1      概述

策略模式主要应用于多种方法解决一个问题中,或一个东西有多种做法,现在只选择其中一种方法,将来可能会用另一种方法。就像一道题有多种算法,需要把这些不同的算法封装起来,达到使用无差别化。

8.2      设计

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

8.3      实现

UML图:

示例代码为:
 1using System;
 2using System.Collections ;
 3
 4namespace Example
 5{
 6    /// <summary>
 7    /// 示例
 8    /// </summary>

 9    class Example
10    {
11        /// <summary>
12        /// 应用程序的主入口点。
13        /// </summary>

14        [STAThread]
15        static void Main(string[] args)
16        {
17            Context c = new Context() ;
18            c.ContextInterface() ;
19        }

20        /// <summary>
21        /// 使用策略的类
22        /// </summary>

23        public class Context
24        {
25            private Strategy s = null ;
26            public void ContextInterface()
27            {
28                s = new ConcreteStrategyB() ;//决定使用哪个策略
29                s.AlgorithmInterface() ;
30            }

31        }

32        /// <summary>
33        /// 策略抽象类,封装实现策略的接口
34        /// </summary>

35        public abstract class Strategy
36        {
37            public abstract void AlgorithmInterface() ;
38        }

39        /// <summary>
40        /// A策略
41        /// </summary>

42        public class ConcreteStrategyA : Strategy
43        {
44            public override void AlgorithmInterface()
45            {
46                Console.WriteLine( "实现A算法" ) ;
47            }

48        }

49        /// <summary>
50        /// B策略
51        /// </summary>

52        public class ConcreteStrategyB : Strategy
53        {
54            public override void AlgorithmInterface()
55            {
56                Console.WriteLine( "实现B算法" ) ;
57            }

58        }

59        /// <summary>
60        /// C策略
61        /// </summary>

62        public class ConcreteStrategyC : Strategy
63        {
64            public override void AlgorithmInterface()
65            {
66                Console.WriteLine( "实现C算法" ) ;
67            }

68        }

69    }

70}

71
posted on 2005-08-10 21:06  超哥  阅读(898)  评论(0编辑  收藏  举报