Java设计模式 策略模式

来源:互联网 发布:蜂窝移动数据无法清零 编辑:程序博客网 时间:2024/05/20 03:45

   今天给大家带来Java设计模式中的策略模式,首先我们还是来看下策略模式的定义:

创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这些方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分,策略就是传递进去的参数对象,他包含要执行的代码。下面我们看一个列子:

 例如,假设有一个Processor类,他有一个name()方法;另外还有一个process()方法,该方法接收输入参数,修改它的值,然后产生输出。这个类作为基类而被扩展,用来创建各种不同类型的Processor。在本例中,Processor的子类将修改String对象(注意,返回类型可以是协变类型,这里介绍下什么是协变类型,Java SE5中添加了协变返回类型,他表示在导出类(子类)中的被覆盖的方法可以返回基类方法的返回类型的某种导出类(子类)型。)

package strategyimprove;


public class Processor {


public String name() {
return getClass().getSimpleName();
}


Object process(Object input) {
return input;
}


}


package strategyimprove;


public class Downcase extends Processor {

@Override
String process(Object input) {
// TODO Auto-generated method stub
return ((String)input).toLowerCase();
}

}


package strategyimprove;


import java.util.Arrays;


public class Splitter extends Processor {

@Override
String process(Object input) {
// TODO Auto-generated method stub
return Arrays.toString(((String)input).split(" "));
}

}


测试类:

package strategyimprove;


public class Apply {


public static String mStrategy = "strategy test";


public static void process(Processor p, Object s) {
System.out.println("uing processor " + p.name());
System.out.println(p.process(s));
}


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
process(new Upcase(), mStrategy);
process(new Downcase(), mStrategy);
process(new Splitter(), mStrategy);
}


}


控制台输出如下:

uing processor Upcase
STRATEGY TEST
uing processor Downcase
strategy test
uing processor Splitter
[strategy, test]


  好了,到这里策略模式就和大家简单介绍完了,希望大家在项目中可以用的到。