打字猴:1.700480102e+09
1700480102
1700480103
1700480104
1700480105 设计模式之禅 33.2.2 门面模式实现工资计算
1700480106
1700480107 工资计算是一件非常复杂的事情,简单地来说,它是对基本工资、月奖金、岗位津贴、绩效、考勤、税收、福利等因素综合运算后的一个数字。即使设计一个HR(人力资源)系统,员工工资计算也是非常复杂的模块,但是对于外界,比如高管层,最希望看到的结果是张三拿了多少钱,李四拿了多少钱,而不是看中间的计算过程,怎么计算那是人事部门的事情。换句话说,对外界的访问者来说,它只要传递进去一个人员名称和月份即可获得工资数,而不用关心其中的计算有多么复杂,这就用得上门面模式了。
1700480108
1700480109 门面模式对子系统起封装作用,它可以提供一个统一的对外服务接口,如图33-5所示。
1700480110
1700480111
1700480112
1700480113
1700480114 图33-5 HR系统的类图
1700480115
1700480116 该类图主要实现了工资计算,通过HRFacade门面可以查询用户的工资以及出勤天数等,而不用关心这个工资或者出勤天数是怎么计算出来的,从而屏蔽了外系统对工资计算模块的内部细节依赖。我们先看子系统内部的各个实现,考勤情况如代码清单33-21所示。
1700480117
1700480118 代码清单33-21 考勤情况
1700480119
1700480120 public class Attendance{
1700480121
1700480122 //得到出勤天数
1700480123
1700480124 public int getWorkDays(){
1700480125
1700480126 return(new Random()).nextInt(30);
1700480127
1700480128 }
1700480129
1700480130 }
1700480131
1700480132 非常简单,只用一个方法获得一个员工的出勤天数。我们再来看奖金计算,如代码清单33-22所示。
1700480133
1700480134 代码清单33-22 奖金计算
1700480135
1700480136 public class Bonus{
1700480137
1700480138 //考勤情况
1700480139
1700480140 private Attendance atte=new Attendance();
1700480141
1700480142 //奖金
1700480143
1700480144 public int getBonus(){
1700480145
1700480146 //获得出勤情况
1700480147
1700480148 int workDays=atte.getWorkDays();
1700480149
1700480150 //奖金计算模型
1700480151
[ 上一页 ]  [ :1.700480102e+09 ]  [ 下一页 ]