策略模式
解决问题的方式很多,不同的策略或许能更高效地找到最合适的方式,在有些情况下,需要对策略的实现方式进行切换,使得程序变得灵活,通过这种方式封装不同的算法,避免多重条件的判断,完善程序的扩展性,且策略模式是一种行为型模式
Strategy.java
public interface Strategy {
public int doSomething(int A, int B);
}
AddStrategy.java
public class AddStrategy implements Strategy {
@Override
public int doSomething(int A, int B) {
return A+B;
}
}
SubtractStrategy.java
public class SubtractStrategy implements Strategy{
@Override
public int doSomething(int A, int B) {
return A-B;
}
}
ContextFactory.java
public class ContextFactory {
private Strategy strategy;
public ContextFactory(String operation){
switch (operation){
case "add":
Strategy add = new AddStrategy();
strategy = add;
break;
case "subtract":
Strategy subtract = new SubtractStrategy();
strategy = subtract;
break;
default:
break;
}
}
public int executeStrategy(int A, int B){
return strategy.doSomething(A, B);
}
}
TestStrategy.java
public class TestStrategy {
public static void main(String[] args) {
System.out.println("add:" + start("add"));
System.out.println("subtract:" + start("subtract"));
}
public static int start(String type){
ContextFactory cf = new ContextFactory(type);
return cf.executeStrategy(33,66);
}
}
Run result
add:99
subtract:-33
策略模式不可避免的使客户端进行算法选择,本例采用策略模式与简单工厂相结合的方式,实现与客户端的解耦,大大减少了客户端的操作步骤
由此可见策略模式的缺点在于如果策略的实现方式过多,则相对麻烦,且需要向外暴露策略类,如果策略过多,则可以考虑混合模式解决