《大话设计模式》java实现之简单工厂模式

来源:互联网 发布:大数据神经网络 编辑:程序博客网 时间:2024/05/14 14:59

《大话模式》这本书写得不错,可惜不是java版,现在有空,想着用java实现一下,写到哪算哪
UML图
这里写图片描述
代码结构图
这里写图片描述

public class Client {    public static void main(String[] args) {        Operation operation = OperationFactory.createOperation("+");        operation.setNumberA(1);        operation.setNumberB(2);        double result = operation.getResult();        System.out.println("result " + result);    }}
public abstract class Operation {    private double numberA = 0;    private double numberB = 0;    public abstract double getResult();    public double getNumberA() {        return numberA;    }    public void setNumberA(double numberA) {        this.numberA = numberA;    }    public double getNumberB() {        return numberB;    }    public void setNumberB(double numberB) {        this.numberB = numberB;    }}
public class OperationAdd extends Operation {    @Override    public double getResult() {        return this.getNumberA() + this.getNumberB();    }}
public class OperationFactory {    public static Operation createOperation(String operate) {        Operation operation = null;        switch (operate) {        case "+":            operation = new OperationAdd();            break;        case "-":            operation = new OperationSub();            break;        default:            break;        }        return operation;    }}
public class OperationSub extends Operation {    @Override    public double getResult() {        return getNumberA() - getNumberB();    }}

书中还有乘法、除法,以及可以扩展的n次幂算法,这里省略,方便查看。
运行结果
这里写图片描述
个人总结:
1.UML图
在简单工厂中,OperationFactory和OperationAdd、OperationSub是依赖关系,而不是关联关系,原因如下:
1.1聚合关系、合成关系都属于关联关系(has-a),是特殊的关联关系,聚合关系时比较弱的“拥有”关系(如大雁与雁群),合成关系是比较强的“拥有”关系(如大雁与翅膀)
1.2依赖关系(user-a):A类的变化引起B类的变化,则B依赖于A,具体表现为在某个类的方法使用另一个类对象作为参数,如局部变量(关联关系是全局变量)、方法参数或静态方法调用
Driver类的drive(Car car)方法与Car类。
没想懂Client和OperationFactory为什么是关联关系???

原创粉丝点击