Jav a 装饰模式(Decorator) 1 场景问题 1
1 复杂的奖金计算 考虑这样一个实际应用:就是如何实现灵活的奖金计算
奖金计算是相对复杂的功能,尤其是对于业务部门的奖金计算方式,是非常复杂的,除了业务功能复杂外,另外一个麻烦之处是计算方式还经常需要变动,因为业务部门经常通过调整奖金的计算方式来激励士气
先从业务上看看现有的奖金计算方式的复杂性: 首先是奖金分类:对于个人,大致有个人当月业务奖金、个人累计奖金、个人业务增长奖金、及时回款奖金、限时成交加码奖金等等; 对于业务主管或者是业务经理,除了个人奖金外,还有:团队累计奖金、团队业务增长奖金、团队盈利奖金等等
其次是计算奖金的金额,又有这么几个基数:销售额、销售毛利、实际回款、业务成本、奖金基数等等; 另外一个就是计算的公式,针对不同的人、不同的奖金类别、不同的计算奖金的金额,计算的公式是不同的,就算是同一个公式,里面计算的比例参数也有可能是不同的
2 简化后的奖金计算体系 看了上面奖金计算的问题,所幸我们只是来学习设计模式,并不是真的要去实现整个奖金计算体系的业务,因此也没有必要把所有的计算业务都罗列在这里,为了后面演示的需要,简化一下,演示用的奖金计算体系如下: 每个人当月业务奖金 = 当月销售额 X 3% 每个人累计奖金 = 总的回款额 X 0
1% 团队奖金 = 团队总销售额 X 1% 1
3 不用模式的解决方案 一个人的奖金分成很多个部分,要实现奖金计算,主要就是要按照各个奖金计算的规则,把这个人可以获取的每部分奖金计算出来,然后计算一个总和,这就是这个人可以得到的奖金
(1)为了演示,先准备点测试数据,在内存中模拟数据库,示例代码如下: 01 /** 02 * 在内存中模拟数据库,准备点测试数据,好计算奖金 03 */ 04 public class Te