策略模式-Strategy Pattern

声明:引自http://www.cnblogs.com/myqiao/archive/2005/07/30/203741.html

策略模式-Strategy Pattern-康熙收复台湾-明珠和索额图的不同策略
前言:我也是初学者,希望大家能提出意见。另外转载请注明作者和出处,毕竟花了快一周的时间才完成。

策略模式(Strategy Pattern)和建造模式(Builder Pattern)实际上很相似,只有很小的差别。

建造模式让人去干活,具体怎么干已经给出了一定的步骤,在这个框架之内,你可以去发挥。

而策略模式让人去干活,不限制条件,我只告诉你要达到什么目的,其他的你海阔天空为所欲为,自己想办法,所以叫策略模式。

比如在我的上一篇文章《设计模式-Builder Pattern -领导者艺术-乾隆、和申、纪晓岚的故事》中,乾隆就如何对付格尔丹给出了一定的工作步骤,即必须是送黄金万两,送美女一名,骗住格尔丹。在这两个前提条件下,如何干那就看大臣的了,结果虽然条件是一样的,但和申和纪晓岚仍然得到了完全不同的结果。

在这一篇中,我讲的故事是康熙收复台湾的故事,他只选择了一个大臣,全权交给这个大臣负责(即采取了这个大臣的策略),反正你把台湾给我收回来就行了,怎么干都行我不管。结果,索额图和明珠各有妙计,均收回了台湾。

下面看看代码

客户端

 

using System;
 
namespace StrategyPattern
{
    class Client
    {
        [STAThread]
        static void Main(string[] args)
        {
            //选择索额图的办法
            King king1=new King();
            king1.SelectStrategy(new Suoetu());
 
 
            Console.WriteLine("时间到转,历史重新上演了一遍========================================");
            Console.WriteLine();
            Console.WriteLine();
 
 
            //选择明珠的办法
            King king2=new King();
            king2.SelectStrategy(new Minzhu());
 
            Console.Read();
        }
    }
}
 

策略模式相关类

using System;
 
namespace StrategyPattern
{
    public class King
    {
        public  King()
        {
            Console.WriteLine("康熙:朕准备解放台湾,做千古一帝,哪位爱卿愿意前往?");
        }
 
 
        //选择一个大臣(即策略),放手让他去做
        public void SelectStrategy(Minister minister)
        {
            Console.WriteLine("康熙:{0}爱卿,一定要成功呀!",minister.Name);
            Console.WriteLine();
            minister.Strategy();
        }
 
    }
 
 
    /**//// <summary>
    /// 抽象的策略,这里是不同大臣的做法
    /// </summary>
    public interface Minister
    {
        string Name
        {
            get;
        }
 
        void Strategy();
 
    }
 
 
    public class Suoetu:Minister
    {
 
        public Suoetu()
        {
            Console.WriteLine("索额图:臣军机大臣索额图愿意前往!");
        }
    
        //索额图的办法
        public void Strategy()
        {
            Console.WriteLine("索额图用了三个月的时间");
            Console.WriteLine("筹集了白银一千万两,美女一万名,腐败干部一千名送进台湾。。。。");
            Console.WriteLine("半年后,台湾由于各级官员大吃大喝,包养二奶,贪污腐败,竟然自己垮台了!");
            Console.WriteLine();
            Console.WriteLine();
        }
    
        public string Name
        {
            get
            {
                return "索额图";
            }
        }
    }
 
    public class Minzhu:Minister
    {
 
        public Minzhu()
        {
            Console.WriteLine("明珠:臣上书房参谋明珠愿意前往!");
        }
    
 
        //明珠的办法
        public void Strategy()
        {
            Console.WriteLine("明珠用了三年时间");
            Console.WriteLine("建立了三支无敌舰队,炮舰800艘,黑压压的驶进台湾海峡。。。。");
            Console.WriteLine("三天之后,台湾变成一片焦土,竟然有二百艘战舰杀进了日本东京!");
            Console.WriteLine();
            Console.WriteLine();
        }
    
        public string Name
        {
            get
            {
                return "明珠";
            }
        }
    }
}



声明:引自http://www.cnblogs.com/myqiao/archive/2005/07/30/203741.html

posted @ 2007-03-06 12:31  kuailewangzi1212  阅读(160)  评论(0编辑  收藏  举报