何为策略,就是可以实现目标的方案集合。而完成一项任务有不同的方式,每一种方式称为一个策略。策略模式就是定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。很简单的一个例子:年底移动公司推出很多的活动,比如说:存话费赠食用油,交话费赠话费,买手机赠话费等等。推出这些个活动目的就只有一个,刺激消费为公司创造利润,而我们可以将这些个活动当做一个一个的策略,如下:
abstract classStrategy { //算法方法 publicabstract void acceptCash(); } //策略A classConcreteStrategyA:Strategy { publicoverride void acceptCash() { console.Writeline("存话费赠食用油"); } } //策略B classConcreteStrategyB:Strategy { publicoverride void acceptCash() { console.Writeline("交话费赠话费"); } } //策略C classConcreteStrategyC:Strategy { publicoverride void acceptCash() { console.Writeline("买手机赠话费"); } } //策略模式实现功能acceptCash classContext { Strategy strategy; //实例化不同的策略 public Context (Strategystrategy) { this.strategy=strategy; } Public void GetResult() { return strategy.acceptCash(); } }
而主函数代码则如下:
Context context;
context=new Context(new ConcreteStrategyA);
context.GetResult();
通过和简单工厂模式进行比较发现,简单工厂模式是通过工厂类将一些功能类进行封装从而返回不同实例化的对象,而策略模式则是为实现某一目的而进行的将实例化类和该功能的实现方法进行封装,从而直接调用策略类的输出方法则就能直接实现该功能。