《敏捷软件开发:原则,模式与实践》学习总结《二》
2014-10-27 00:00
537 查看
摘要: 雇员工资的计算与支付
建立不同雇员对应的类后,下面实现不同雇员的工资结算和发送。
提取抽象
抽象一:雇员都要计算工资
抽象二:雇员都要在一定的时间点发工资
2.建立抽象基类
3.实现钟点工的薪水计算与发放
4.实现销售人员的薪水发放
5.实现完全领月薪的雇员工资结算
至此,三种雇员的工资计算方法实现完毕
6.总结
工资的结算与发放核心部分就是要找出公共部分,提取抽象。
建立不同雇员对应的类后,下面实现不同雇员的工资结算和发送。
提取抽象
抽象一:雇员都要计算工资
抽象二:雇员都要在一定的时间点发工资
2.建立抽象基类
/** * 抽象:发放薪水,在一定的时间发放 * @author * @param <T> * */ public abstract class PaymentMethod { public abstract boolean execute(EmployeeBase employeeBase);//发放薪水 public abstract boolean isPayDay(Date date);//判断是否是发薪日 }
3.实现钟点工的薪水计算与发放
public class HourlyPaymentMethod extends PaymentMethod{ /** * 计算小时工的工资 * @param hourlyEmployee * @return */ private float pay(HourlyEmployee hourlyEmployee){ try { float salary = 0; List<TimeCard> timeCard = hourlyEmployee.getTimeCard(); if(SalaryUtils.isEmpty(timeCard)) return 0; for(TimeCard tCard:timeCard){ Float hours = TimeCard.getWorkHourly(tCard.getStartTime(), tCard.getEndTime()); Float rate = hourlyEmployee.getHourlyRate(); if(hours<=8){ salary += hourlyEmployee.getHourlyRate()*hours; }else{ salary += (float) ((hours-8)*rate*1.5+rate*8); } } return salary; } catch (Exception e) { e.printStackTrace(); } return 0; } //按照工作小时计算,如果当日工作超过八小时则超过部分按照时薪的1.5倍支付,每周五发放 @Override public boolean isPayDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int weekDay = calendar.get(Calendar.DAY_OF_WEEK); if(weekDay-1==5) return true; return false; } @Override public boolean execute(EmployeeBase employeeBase) { try { Date date = new Date(); if(isPayDay(date)){ pay((HourlyEmployee) employeeBase); return true; } } catch (Exception e) { e.printStackTrace(); } return false; } }
4.实现销售人员的薪水发放
public class CommissionedPaymentMethod extends PaymentMethod{ @Override public boolean execute(EmployeeBase employeeBase) { CommissionedEmployee e = (CommissionedEmployee) employeeBase; if(isPayDay(e.getLastPayday())){ pay(e); } return false; } /** * param:date 上一次发薪时间 * 是否是发薪日 */ @Override public boolean isPayDay(Date date){ //当前日期 Date currentDate = new Date(); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(currentDate); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date); long mils = calendar1.getTimeInMillis()-calendar2.getTimeInMillis(); int days = (int) (mils/(1000*60*60*24)); if(days==14) return true; return false; } //计算销售人员的工资 private float pay(CommissionedEmployee commissionedEmployee){ //根据销售单据计算奖金 SaleReceipt saleReceipt = commissionedEmployee.getSaleReceipt(); float reward = getSaleReward(saleReceipt); float salary = 0; salary = commissionedEmployee.getMonthlSalary()+reward; return salary; } //计算奖金 private float getSaleReward(SaleReceipt saleReceipt){ return 0; } }
5.实现完全领月薪的雇员工资结算
public class SalaryEmPaymentMethod extends PaymentMethod{ @Override public boolean execute(EmployeeBase employeeBase) { Date date = new Date(); if(isPayDay(date)){ pay((SalaryEmployee) employeeBase); return true; } return false; } //发薪日 @Override public boolean isPayDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int today = calendar.get(Calendar.DAY_OF_MONTH); if(lastDay==today) return true; return false; } //计算工资 private float pay(SalaryEmployee salaryEmployee){ float salary = 0; salary = salaryEmployee.getSalary(); return salary; } }
至此,三种雇员的工资计算方法实现完毕
6.总结
工资的结算与发放核心部分就是要找出公共部分,提取抽象。
相关文章推荐
- 敏捷软件开发:原则,模式与实践》学习总结《三》
- 《敏捷软件开发:原则,模式与实践》学习总结《一》
- 推荐:《敏捷软件开发、原则、模式与实践》电子版
- 敏捷软件开发(原则,模式与实践)笔记1
- 敏捷软件开发:原则、模式与实践的学习笔记
- 敏捷软件开发--模式,原则及实践 读书笔记
- 敏捷软件开发:原则、模式与实践(C#版)
- 《敏捷软件开发原则,模式与实践》读书笔记
- 《敏捷软件开发(原则、模式与实践)》第四章到第八章笔记
- 推荐:敏捷软件开发:原则、模式与实践(C#版)
- 敏捷软件开发:原则、模式与实践读书摘要
- 读敏捷软件开发-原则,模式,与实践的感触
- 《敏捷软件开发:原则、模式与实践》 前三章读书笔记 --概念和原则
- 敏捷软件开发原则,模式与实践(c#)读书笔记(1)-重构
- 《敏捷软件开发 ——原则、模式、与实践》学习笔记(1)
- 关于《敏捷软件开发:原则、模式与实践(C#版)》
- 敏捷软件开发:原则模式与实践之笔记
- 《敏捷软件开发 原则、模式与实践》的读书笔记
- 《敏捷软件开发原则、模式与实践》读书笔记(一)
- 《敏捷软件开发(原则、模式与实践)》前三章笔记