1.为什么要使用策略模式
策略模式非常的简单,简单到就是java的多态性的表现,拥有抽象接口,调用者可以自行实例化需要的实例。
2.类图
Strategy是策略的抽象,Add,Sub是具体的实现,Context只拥有抽象策略对象。
3.实现
策略类
public interface Strategy {
void excute(int a, int b);
}
public class Add implements Strategy{
@Override
public void excute(int a, int b) {
System.out.println(a+b);
System.out.println("This is strategy1");
}
}
public class Sub implements Strategy{
@Override
public void excute(int a, int b) {
System.out.println(a-b);
System.out.println("This is strategy2");
}
}
context
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
}
main方法
/**
* 策略模式:
* 有加减两个策略,根据需要进行实例化,调用者只需要关心自己的需求而无需关心策略的实现
*/
public class Main {
public static void main(String[] args) {
Strategy strategy = new Add();
Context context = new Context(strategy);
context.getStrategy().excute(1,2);
}
4.策略模式的扩展---策略枚举
/**
* 策略模式的扩展-----策略枚举
*/
public enum StrategyEnum {
ADD("+") {
@Override
protected void excute(int a, int b) {
System.out.println(a+b);
}
},
SUB("-") {
@Override
protected void excute(int a, int b) {
System.out.println(a-b);
}
};
StrategyEnum(String value) {
this.value = value;
}
private String value;
public String getValue() {
return value;
}
protected abstract void excute(int a, int b);
}
//main 方法
public class Main {
public static void main(String[] args) {
//策略模式的扩展,策略枚举
StrategyEnum.ADD.excute(1,2);
}
}
这种方法比较简略,但是直接少了好几个类。但是作用是一样的。