using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
    策略模式
 
 */
namespace App_MYCS.HDL_SJMS.CLMS
{
  
    //调用
    public class my_clms_dy
    {
        public void dy()
        {
            //需要知道哪个对像再放进去
            my_CLMS clms;
            clms = new my_CLMS(new class_sxl_1());
            clms.dy_appfunction();
            clms = new my_CLMS(new class_sxl_2());
            clms.dy_appfunction();
        }
        public void dy2()
        {
            //改造后,更简要,外部只要知道一个类就可以了 转不同的参数有不同的结果
            //对外变成字符串
            my_clms2 clms2;
            clms2 = new my_clms2("1");
            clms2.dy_appfunction();
            clms2 = new my_clms2("2");
            clms2.dy_appfunction();
        }
    }
    //策略中间类 (对外的就只有策略对象 )
    public class my_CLMS
    {
        class_cxl cxl;
        public my_CLMS(class_cxl cxlx)//策略对象
        {
            this.cxl = cxlx;
        }
        public void dy_appfunction()
        {
            //根据对象不同,调用不同的对象实现方法
            cxl.appfunction();
        }
    }
    
    //抽像类
    public abstract class class_cxl
    {
        //抽像方法
        public abstract void appfunction();
    }
    public class class_sxl_1 : class_cxl
    {
        //实现抽像类
        public override void appfunction()
        {
            Console.WriteLine("实现方式1");
        }
    }
    public class class_sxl_2 : class_cxl
    {
        //实现抽像类
        public override void appfunction()
        {
            Console.WriteLine("实现方式2");
        }
    }
    //-------------------------------------------------------
    //进一步的改造策略中间类
    public class my_clms2
    {
        class_cxl cxl;
        public my_clms2(string typestr)//策略对象
        {
            switch (typestr)
            {
                case "1":
                    class_sxl_1 sxl1 = new class_sxl_1();
                    cxl = sxl1;
                    break;
                case "2":
                    class_sxl_2 sxl2 = new class_sxl_2();
                    cxl = sxl2;
                    break;
                default:
                    break;
            }
        }
        public void dy_appfunction()
        {
            //根据对象不同,调用不同的对象实现方法
            cxl.appfunction();
        }
    }
}
原文:http://www.cnblogs.com/longkai178/p/5815092.html