策略模式

Strategy策略模式是属于设计模式中对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.
它的UML图

按此在新窗口浏览图片
Strategy是一个策略类,其中定义一个或多个算法接口
ConcreteStrategy是实现算法接口的具体策略类
Context是上下文应用

比如,我要从龙阳路去浦东国际机场,我可以选择坐公交、可以选择打车、可以选择坐磁悬浮。
这里的乘车方式就是一个可变的,因此独立为一接口
如策略接口
public interface IToAerodrome
    {
        void ToDo();
    }

实现该接口(算法)的具体类
 public class ByBus : IToAerodrome
    {
        #region IToAerodrome 成员

        public void ToDo()
        {
            Console.WriteLine("乘坐公交车去机场");
        }

        #endregion
    }
    public class ByTaxi : IToAerodrome
    {
        #region IToAerodrome 成员

        public void ToDo()
        {
            Console.WriteLine("我乘坐出租车去机场");
        }

        #endregion
    }

    public class ByTrain : IToAerodrome
    {
        #region IToAerodrome 成员

        public void ToDo()
        {
            Console.WriteLine("坐每小时200公里的磁悬浮");
        }

        #endregion
    }


public class ToAerodromeStrategy
    {
        IToAerodrome _ToAerodrome;
        /// <summary>
        /// 构造函数,以实现IToAerodrome的类实体为参数
        /// </summary>
        /// <param name="toAerodrome"></param>
        public ToAerodromeStrategy(IToAerodrome toAerodrome)
        {
            _ToAerodrome = toAerodrome;
        }

        /// <summary>
        /// 改变当前的策略
        /// </summary>
        /// <param name="toAerodrome"></param>
        public void ChangeStrategy(IToAerodrome toAerodrome)
        {
            _ToAerodrome = toAerodrome;
        }

        /// <summary>
        /// 执行方法
        /// </summary>
        public void Go()
        {
            _ToAerodrome.ToDo();
        }
    }


context
static void Main(string[] args)
        {
            ToAerodromeStrategy to = new ToAerodromeStrategy(new ByBus());
            to.Go();
            Console.WriteLine("我要改坐磁悬浮");
            to.ChangeStrategy(new ByTrain());
            to.Go();
            Console.Read();
        }

执行结果
按此在新窗口浏览图片

6 Responses

  1. 爱婚纱 May 13 2008 , 16:47 cn
    爱婚纱
    看不懂....不过今天又问题要问:

    幻想曲 我很菜

    我现在想知道.NET 的优势 和asp 比 安全?? php呢??


    另外:幻想曲的工作是??? 程序,能不能具体点? 网站系统?erp? 嵌入式软件? 什么呢??
    #1
  2. 幻想曲 May 13 2008 , 21:27 cn
    幻想曲
    asp单一脚本语言,asp.net可用C#、VB、VC等多种语言
    asp解释执行,asp.net编译执行
    asp面向过程,asp.net面向对象
    asp无自己的类库,asp.net有自己庞大的类库
    asp无专用IDE,asp.net有VS.NET(据说是最好的IDE)
    ......wink
    #2
  3. 凡人之旅 May 14 2008 , 20:34 cn
    凡人之旅
    都说.net 好,我手上这个网站却是非常地差,功能方面让我郁闷到家。
    要不是不懂得如何处理更换后的路径问题,早就要换了程序去。

    不过幻想曲这个博客的程序还是很不错的,79
    #3
  4. wangdybyt May 15 2008 , 11:14 cn
    wangdybyt
    学习,对接口重新认识了一下。
    请问博主,现在很多网站都有时事更新数据的图表显示功能,但要看的话都需要运行java applet,请问.net(c#)可以做到吗?
    #4
  5. 幻想曲 May 15 2008 , 13:25 cn
    幻想曲
    @wangdybyt:
    可以考虑用ajax去获取
    #5
  6. 彩虹之旅 May 16 2008 , 00:05 cn
    彩虹之旅
    现在的.net功能那么很强大啊,我准备安装 vista 系统学习一下微软的最新的,据说开发更快!89
    #6

Write a comment:



(Will show your Gravatar icon)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

申请链接请看这里