设计模式---策略设计模式

策略模式

1)基本定义

一个类的行为或器算法可以在运行时更改,为一种行为模式。
意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换。
解决问题:在有多种算法相似的情况下,使用if...else所带来的复杂和难以维护
使用场景:一个系统有多个类,而区分他们的只是他们直接的行为
如何解决:场景表示各自策略的对象和一个行为随着策略对象改变而改变的context对象,策略对象改变context对象的指向算法。
关键代码:实现同一个接口

类图:

 

2.demo代码:

策略接口:

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

策略接口实现类:

public class StrategyAdd implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}

public class StrategyMultiply implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

策略Context:

public class StrategyContex {
    Strategy strategy;
    public StrategyContex(Strategy strategy) {
        this.strategy = strategy;
    }
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public int executeStrategy(int num1,int num2) {
        return strategy.doOperation(num1, num2);
    }
}

调用demo:

public class StrategyDemo {
    public static void main(String[] args) {
        int num1 = 2,num2 = 3;
        StrategyContex contextAdd = new StrategyContex(new StrategyAdd());
        System.out.println(contextAdd.executeStrategy(num1, num2));
        
        StrategyContex contextMultiply = new StrategyContex(new StrategyMultiply());
        System.out.println(contextMultiply.executeStrategy(num1, num2));
        
        System.out.println("*************");
        contextMultiply.setStrategy(new StrategyAdd());
        System.out.println(contextMultiply.executeStrategy(num1, num2));
    }
}

调用demo输出:

 

posted @ 2019-06-02 19:28  守望一心  阅读(158)  评论(0编辑  收藏  举报