敏捷软件开发:原则,模式与实践》学习总结《三》

1.需求分析:

    修改不同种类雇员的信息,首先提取抽象:

  1.      修改雇员的基本信息

  2.      修改雇员的薪水结算支付
  3.      修改雇员信息前都要首先获取到雇员信息

2. 建立抽象基类:

   

/**
 * template method
 * @author 
 *
 */
public abstract class ChangeEmployeeTransaction {
    //执行修改
    public boolean executeChange(EmployeeBase emp){
        EmployeeBase employee = this.getEmployee(emp);
        if(employee==null) return false;
        if(changeEmployeeBase(employee)&&changeEmpPaymentMethod(employee)){
            return true;
        }
        return false;
    }
    //获取雇员信息
    public abstract EmployeeBase getEmployee(EmployeeBase employee);
    //修改雇员基本信息
    public abstract boolean changeEmployeeBase(EmployeeBase employee);
    //修改雇员薪水结算支付
    public abstract boolean changeEmpPaymentMethod(EmployeeBase employee);
    
}

3.实现钟点工的修改

/**
 * 修改钟点工的信息
 * @author 
 *
 */
public class ChangeHourlyEmpTransaction extends ChangeEmployeeTransaction{

    @Override
    public EmployeeBase getEmployee(EmployeeBase employee) {
        //根据empID获取employee
        return getHourlyEmployee((HourlyEmployee) employee);
    }

    private HourlyEmployee getHourlyEmployee(HourlyEmployee employee){
        HourlyEmployee hourlyEmployee = new HourlyEmployee();
        hourlyEmployee.setEmpAddress("PD CIA");
        hourlyEmployee.setEmpName("BUSH");
        return hourlyEmployee;
    }
    
    @Override
    public boolean changeEmployeeBase(EmployeeBase employee) {
        //更改地址姓名
        return false;
    }

    @Override
    public boolean changeEmpPaymentMethod(EmployeeBase employee) {
        //更改雇员薪水支付方式支付时间
        return false;
    }

}

4.实现销售人员信息的修改

/**
 * 更改销售人员的信息
 * ps:需要修改销售人员的奖金计算方式
 * @author 
 *
 */
public class ChangeCommisedEmpTransaction extends ChangeEmployeeTransaction{

    @Override
    public EmployeeBase getEmployee(EmployeeBase employee) {
        CommissionedEmployee e = getCommissionedEmployee((CommissionedEmployee) employee);
        return e;
    }

    private CommissionedEmployee getCommissionedEmployee(CommissionedEmployee employee){
        CommissionedEmployee employee2 = new CommissionedEmployee();
        employee2.setMonthlSalary((float)3000);
        return employee2;
    }
    
    @Override
    public boolean changeEmployeeBase(EmployeeBase employee) {
        return false;
    }

    @Override
    public boolean changeEmpPaymentMethod(EmployeeBase employee) {
        return false;
    }

5.实现完全按月领薪水的雇员的信息修改

/**
 * 更改销售人员的信息
 * ps:需要修改销售人员的奖金计算方式
 * @author 
 *
 */
public class ChangeCommisedEmpTransaction extends ChangeEmployeeTransaction{

    @Override
    public EmployeeBase getEmployee(EmployeeBase employee) {
        CommissionedEmployee e = getCommissionedEmployee((CommissionedEmployee) employee);
        return e;
    }

    private CommissionedEmployee getCommissionedEmployee(CommissionedEmployee employee){
        CommissionedEmployee employee2 = new CommissionedEmployee();
        employee2.setMonthlSalary((float)3000);
        return employee2;
    }
    
    @Override
    public boolean changeEmployeeBase(EmployeeBase employee) {
        return false;
    }

    @Override
    public boolean changeEmpPaymentMethod(EmployeeBase employee) {
        return false;
    }

}

6.测试用例

public class TestChangeHourlyEmpTransaction extends TestCase{
    
    public void testExecute() throws Exception{
        ChangeEmployeeTransaction hourlyEmpTransaction = new ChangeHourlyEmpTransaction();
        assertEquals(false, hourlyEmpTransaction.executeChange(new HourlyEmployee()));
        ChangeEmployeeTransaction commisTransaction = new ChangeCommisedEmpTransaction();
        assertEquals(false, commisTransaction.executeChange(new CommissionedEmployee()));
        ChangeEmployeeTransaction  salaryTransaction = new ChangeSalaryEmpTransaction();
        assertEquals(false, salaryTransaction.executeChange(new SalaryEmployee()));
    }
    
    
}

7.总结

 本次的实现主要是为了学习模板方法模式,代码不做过多的实现。通过学习分析,初步理解了模板方法模式的用处和OCP原则以及测试用例的使用。在进行具体的业务编码之前先建立测试程序会尽早的发现问题,极大提高编程效率。

转载于:https://my.oschina.net/fangfeiAI/blog/337800

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值