加减乘除的扩展设计

加减乘除的扩展设计

需求:

  1. 实现加减运算(注意:以后可能会扩展乘除,备注:时间日期类型好像不支持乘除)
  2. 加减的操作对象包括(Date和DateTime按天加减,currency实现减法时不能小于0,percent最大值不超过100,最小值不小于0),如果超出范围则不执行运算,并返回信息相应的错信息(eg:percent is more than 100% unable to add)

设计方案

方案一:模版+工厂

  1. 定义一个计算接口,里面包含add和subtract
  2. Date,DateTime,Percent,Number类型实现这个计算接口,并进行相应的验证
  3. 定义一个工厂类,用来确定哪个类型的哪个操作符调用哪个方法
  4. 对于之后添加的乘除操作符,在计算接口里面添加,Multiplication和 division,使用default修饰。

方案二:策略+策略

  1. 定义一个计算接口,里面只有calculation抽象方法
  2. Date,DateTime,Percent,Number类型实现这个计算接口,再在每个里面实现计算策略,相当于使用两次策略模式。
  3. 验证可以定义一个Result,里面包含boolean的isSuccess和String的message。

方案三:策略+工厂

  1. 计算是单独一个模块,验证是单独一个类的共能,功能上解耦
  2. 使用策略模式和工厂模式。

体会

高内聚,低耦合。不变的真理,但是到做的时候有很多种方式,就这个例子来说,划分的时候有多种思路:

  1. 根据不同的计算对象分(Date,DateTime,Number,Percent,Currency)
  2. 根据不同的操作符划分(加减乘除)
  3. 验证和计算要不要分割?
  4. 从可扩展角度来讲,怎么设计

越来越体会到,写代码的时间占了一小部分,大部分时间花在了设计和代码优化。
具体代码会上传到GitHub 上,周末整理一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值