策略模式


解决问题的方式很多,不同的策略或许能更高效地找到最合适的方式,在有些情况下,需要对策略的实现方式进行切换,使得程序变得灵活,通过这种方式封装不同的算法,避免多重条件的判断,完善程序的扩展性,且策略模式是一种行为型模式

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

策略模式不可避免的使客户端进行算法选择,本例采用策略模式与简单工厂相结合的方式,实现与客户端的解耦,大大减少了客户端的操作步骤

由此可见策略模式的缺点在于如果策略的实现方式过多,则相对麻烦,且需要向外暴露策略类,如果策略过多,则可以考虑混合模式解决