大话设计模式读书笔记(二)

来源:互联网 发布:java调用python脚本 编辑:程序博客网 时间:2024/06/11 19:53

策略模式

Why

接上一篇的简单工厂模式,我们考虑另外一个问题,上一次的简单工厂模式我们在客户端需要一个class来根据要求调用不同的Operation子类。然而,每当计算有新的需求加入的时候,这个工厂都需要重新编译部署。并且,客户端需要Operation这个子类以便调用相应的类。

What

策略模式定义了一系列的算法,并对其进行封装。用这样的方式,我们希望它们之间的替换不影响客户的算法。

How

相比于工厂策略,我们可以把工厂类改造成一个客户端的class,在构造函数中输入相应的逻辑值来判断具体调用哪个方法。用这种方法,客户连Operation类都不需要知道。客户端和运算逻辑彻底分离了。

public class OperationContext {    private Operation op;    public OperationContext(char operator) {        Operation op = null;        switch(operator) {            case '+':                op = new Add();                break;            case '-':                op = new Subtract();                break;              }        return op;    }}

Where

商店的收银系统里面需要包含打折的方法,比如300元减100元,50%折扣等。

Result

利用Context class的构造函数来实现客户端和逻辑的彻底分离,更加方便单元测试并且提供了逻辑代码的重用。

0 0
原创粉丝点击