码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2015-05-19 19:17:56      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:设计模式   策略模式   

UML类图:

技术分享


实例实现代码:

    //抽象算法类
    abstract class Strategy
    {
        //算法方法
        public abstract void AlgorithmInterface();
    }
    //具体算法A
    class ConcreteStrategyA : Strategy
    {
        //算法A实现方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法A实现");
        }
    }
    //具体算法B
    class ConcreteStrategyB : Strategy
    {
        //算法B实现方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法B实现");
        }
    }
    //具体算法C
    class ConcreteStrategyC : Strategy
    {
        //算法C实现方法
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法C实现");
        }
    }
    //上下文
    class Context
    {
        Strategy strategy;

        public Context(Strategy strategy)
        {
            this.strategy = strategy;
        }
        //上下文接口
        public void ContextInterface()
        {
            strategy.AlgorithmInterface();
        }
    }


客户端实现:

        static void Main(string[] args)
        {
            Context context;

            context = new Context(new ConcreteStrategyA());
            context.ContextInterface();

            context = new Context(new ConcreteStrategyB());
            context.ContextInterface();

            context = new Context(new ConcreteStrategyC());
            context.ContextInterface();

            Console.Read();
        }

说明

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

Context(应用场景):

1.需要使用ConcreteStrategy提供的算法。

2.内部维护一个Strategy的实例。

3.负责动态设置运行时Strategy具体的实现算法。

4.负责跟Strategy之间的交互和数据传递。

Strategy(抽象策略类):

定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。

ConcreteStrategy(具体策略类):

 实现了Strategy定义的接口,提供具体的算法实现。


应用场景:

1.多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

2.需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

3.对客户隐藏具体策略(算法)的实现细节,彼此完全独立。


策略模式和工厂模式的区别:

一个关注对象创建 

一个关注行为的封装

工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。

策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。


参考资料

-《大话设计模式》

策略模式

标签:设计模式   策略模式   

原文地址:http://blog.csdn.net/junjun150013652/article/details/45845831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!