策略模式

来源:互联网 发布:工业以太网知乎 编辑:程序博客网 时间:2024/05/29 12:20

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.对客户隐藏具体策略(算法)的实现细节,彼此完全独立。


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

一个关注对象创建 

一个关注行为的封装

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

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


参考资料

-《大话设计模式》
0 0
原创粉丝点击