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

《大话模式》这本书写得不错,可惜不是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为什么是关联关系???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值