原文出处:http://www.cnblogs.com/li-peng/archive/2013/02/18/2915594.html
注:为了方便自己日后查阅,把原文做了些许改动。
一、概念部分,改为参考Thinking in java 4rd
二、代码部分,改为java例子。
=======================================================================
策略模式:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法。
这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。“策略”就是传递进去的参数对象,它包含要执行的代码。(参考thinking in java 4rd)
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人
喜欢细嚼慢咽,有的人喜欢边吃边说
策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。
看一下简单的代码实现
package interfaces.classprocessor; import java.util.Arrays; class Processor{ public String name(){ return getClass().getSimpleName(); } Object process(Object input){return input;} } class Upcase extends Processor{ String process(Object input){return ((String)input).toUpperCase();} } class Downcase extends Processor{ String process(Object input){return ((String)input).toLowerCase();} } class Splitter extends Processor{ String process(Object input){return Arrays.toString(((String)input).split(" ")); } } public class Apply { public static void process(Processor p, Object s){ System.out.println("Use Processor:"+p.name()); System.out.println(p.process(s)); } public static String s="Disgreement with beliefs is by definition incorrent"; public static void main(String[] args){ process(new Downcase(),s); process(new Upcase(),s); process(new Splitter(),s); } }
输出:
Use Processor:Downcase
disgreement with beliefs is by definition incorrent
Use Processor:Upcase
DISGREEMENT WITH BELIEFS IS BY DEFINITION INCORRENT
Use Processor:Splitter
[Disgreement, with, beliefs, is, by, definition, incorrent]
策略模式的优点:
1.提供了管理相关算法族的方法。
2.可以避免使用多重条件转移语句。
缺点:
3.必须知道所有的具体策略类及它们的区别.
4.生成许多的策略类。