主要用来在不同的算法之间的切换,而且不会影响客户端.使得修改的代码量最少.
package com.zwy;
/*策略模式,它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到用算法的客户*/
public class Strategy {
/**
* main(这里用一句话描述这个方法的作用)
* (这里描述这个方法适用条件 – 可选)
* @param args
*void
* @exception
* @since 1.0.0
*/
public static void main(String[] args) {
MethodContext context = new MethodContext(new MethodB());
context.getResult();
MethodContextFactory contextFactory = new MethodContextFactory('A');
contextFactory.getResult();
}
}
/*算法抽象类*/
interface Method{
public Object run();
}
/*算法A*/
class MethodA implements Method{
public Object run() {
System.out.println(this.getClass() +" 正在执行算法A");
return null;
}
}
/*算法B*/
class MethodB implements Method{
public Object run() {
System.out.println(this.getClass() +" 正在执行算法B");
return null;
}
}
/*执行算法的容器*/
class MethodContext {
private Method method ;
public MethodContext(Method method){
this.method = method;
}
public Object getResult(){
return method.run();
}
}
/*执行算法的容器,结合工厂类*/
class MethodContextFactory {
private Method method ;
public MethodContextFactory(char type){
this.method = Factory.createMethod(type);
}
public Object getResult(){
return method.run();
}
}
class Factory{
public static Method createMethod(char type){
Method method = null;
switch (type) {
case 'A':
method = new MethodA();
break;
case 'B':
method = new MethodB();
break;
default:
break;
}
return method;
}
}