您现在的位置是:主页>文章>C# 设计模式(2)--策略模式 网站首页

C# 设计模式(2)--策略模式

一,引言

这个系列是本人对设计模式的一些看法,希望能让对设计模式有兴趣的朋友,以此入门,写的不当之处欢迎指出。转载的朋友请留下原文链接。下面为大家介绍一种设计模式——策略模式.

二,定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

结构如图:

三,具体例子

namespace StrategyDemo
{
    /// 
    /// 抽象策略类
    /// 
    abstract class Strategy
    {
        public double numberA=0;
        public double numberB=0;
        //算法方法
        public abstract void GetResult();
    }
}
namespace StrategyDemo
{
    /// 
    /// 具体加法算法
    /// 
    class AddStrategy : Strategy
    {
        public override void GetResult()
        {
            Console.WriteLine("加法算法的实现:" + (numberA + numberB));
        }
    }
}
namespace StrategyDemo
{
    /// 
    /// 具体乘法算法
    /// 
    class MulStrategy : Strategy
    {
        public override void GetResult()
        {
            Console.WriteLine("乘法算法的实现:" + (numberA * numberB));
        }
    }
}
namespace StrategyDemo
{
    /// 
    /// 具体减法算法
    /// 
    class SubStrategy : Strategy
    {
        public override void GetResult()
        {
            Console.WriteLine("减法算法的实现:"+(numberA-numberB));
        }
    }
}
namespace StrategyDemo
{
    class Context
    {
        /// 
        /// 环境类(Context)
        /// 
        Strategy strategy;
        //初始化时,传入具体的策略对象
        public Context(Strategy strategy) 
        {
            this.strategy = strategy;
        }
        public void ContextInterface() 
        {
            strategy.GetResult();
        }
    }
}
namespace StrategyDemo
{
    public class Program
    {
        static void Main(string[] args)
        {
            Context context;
            context = new Context(new AddStrategy() { numberA = 5, numberB = 5 });
            context.ContextInterface();

            context = new Context(new SubStrategy() { numberA = 5, numberB = 5 });
            context.ContextInterface();

            context = new Context(new MulStrategy() { numberA = 5, numberB = 5 });
            context.ContextInterface();

            Console.Read();
        }
    }
}

四,总结

优点:

1,通过继承一定程度上可以做到代码的复用。

2,策略模式简化多重条件转移语句。

3,隔离了算法的具体实现,解耦客户端的部分业务逻辑。提高了算法扩展上的灵活性。

缺点:

1,客户端必须知道所有的策略类,并自行决定调用哪一个策略类。

2,策略类过多。

暂时说到这里,喜欢请转载,有任何问题欢迎留言...

本例实例下载:策略模式源码

Top