在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。
策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也称为政策模式(Policy)。
package com.livvy.shejimoshi;
import java.util.Arrays;
interface Processor {
String name();
Object process(Object input);
}
/*
* 客户端实例 第一个参数为接口 其实可以直接把接口当做一个参数类型(类似 object 只不过没有那么顶级)来处理
*/
class Apply {
public static void process(Processor p, Object s) {
System.out.println("Using processor " + p.name());
System.out.println(p.process(s));
}
}
/*
* 策略一 继承抽象类 实现策略方法
*/
class Upcase extends _03Strategy {
@Override
public String process(Object input) {
return ((String) input).toUpperCase();
}
}
/*
* 策略二 继承抽象类 实现策略方法
*/
class Downcase extends _03Strategy {
@Override
public String process(Object input) {
return ((String) input).toLowerCase();
}
}
/*
* 策略三 继承抽象类 实现策略方法
*/
class Splitter extends _03Strategy {
@Override
public String process(Object input) {
return Arrays.toString(((String) input).split(" "));
}
}
/*
* 实现了接口的抽象方法 实现了接口中的第一个方法 第二个方法抽出来成了抽象方法作为算法
*
*/
public abstract class _03Strategy implements Processor {
@Override
public String name() {
return getClass().getSimpleName();
}
public abstract String process(Object input);
public static String s = "i love you i hope you do so";
public static void main(String[] args) {
Apply.process(new Upcase(), s);
Apply.process(new Downcase(), s);
Apply.process(new Splitter(), s);
}
}