策略模式

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

如何解决:将这些算法封装成一个一个的类,任意地替换。

关键代码:实现同一个接口。

例子:

public interface IStrategy {
    
    public int  doOperation(int num1, int num2);
}

做加法的策略

public class OperationAdd implements IStrategy {

    @Override
    public int doOperation(int num1, int num2) {
        // 做加法
        return num1 + num2;
    }
}

做减法策略

public class OperationSubstract implements IStrategy {

    @Override
    public int doOperation(int num1, int num2) {
        // 做减法
        return num1 - num2;
    }
}

做乘法策略

public class OperationMultiply implements IStrategy {

    @Override
    public int doOperation(int num1, int num2) {
        // 做乘法
        return num1 * num2;
    }
}

 

创建 Context 类

public class Context {
    private IStrategy strategy;
    
    public Context(IStrategy strategy) {
        this.strategy = strategy;
    }
    
    public int excuteStrategy(int num1,int num2) {
        return strategy.doOperation(num1, num2);
    }
}

 

使用 Context 来查看当它改变策略 Strategy 时的行为变化

public class StrategyPatternDemo {
    
    public static void main(String[] args) {
        Context context ;
        context = new Context(new OperationAdd());
        System.out.println(context.excuteStrategy(1, 2));
        
        context = new Context(new OperationMultiply());
        System.out.println(context.excuteStrategy(1, 2));
        
        context = new Context(new OperationSubstract());
        System.out.println(context.excuteStrategy(1, 2));
    }
}

運行打印:

3
2
-1

 

posted @ 2020-04-14 18:58  小污龟  阅读(120)  评论(0编辑  收藏  举报