设计模式——策略模式

来源:互联网 发布:温州网络作家协会 编辑:程序博客网 时间:2024/06/10 21:58

场景设置

设计一个计算器,有+、-、*、/。

策略模式的主要思想在于,将所有的可供选择的算法封装,通过一个统一的容器传入予以调用。比如:
我有一个计算用的接口,往里面插入计算器,计算器中有加法器、减法器等等,这些就是策略,我把策略包装好,放入计算器进行调用,计算器再插入接口即可。
因此基于该模式的代码应如下:
计算接口:

interface Operation{    public int calculate(int a, int b);}

策略应该实现Strategy接口使得所有策略保持类型一致,并拥有统一的调用方法:

class AddStrategy implements Strategy{    @Override    public int operate(int a, int b) {        return a+b;    }}class MinusStrategy implements Strategy{    @Override    public int operate(int a, int b) {        return a-b;    }}

计算器应该实现Operation接口,用来执行calculate

class Calculator implements Operation{    private Strategy strategy = null;    public void setStrategy(String tag){        if(tag.equals("+")){            strategy = new AddStrategy();        }        if(tag.equals("-")){            strategy = new MinusStrategy();        }    }    @Override    public int calculate(int a, int b) {        return strategy.operate(a,b);    }}

最后,调用计算器可如下编写:

 public static void main(String[] args){        Calculator calculator = new Calculator();        calculator.setStrategy("+");        calculator.calculate(1,2);    }

策略模式就是用来封装算法的,实践中可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并传给策略模式的Calculate对象。
但是,对于策略的增加和修改,还是需要修改Calculate这个类,正所谓任何的变更都是需要成本的。

0 0
原创粉丝点击