对于OCP与DIP的判别过程
1.找相同类型的具体概念 :如果有两个及两个以上—>ocp 1个—>dip
2.验证:对代码尝试扩展。如果修改了代码则违反ocp原则
接下来给出一个例题介绍些改进思路:
public class Department{
private List<Employee> employeeList;
...
public Employee addEmployee(int employee, String name){
Employee emp
switch(employeeType){
case EMPLOYEE.SALARIED: emp= new SalariedEmployee(name);break;
case EMPLOYEE.HOUR: emp= new HourlyEmployee(name);break;
case EMPLOYEE.COMMISSION: emp= new Commission(name);break;
case default: emp= new SalariedEmployee(name);break;
}
emp.setDepartment(this);
employeeList.add(emp);
update;
}
...
}
1.抽象:
抽象一些概念(找出)
抽象概念的行为(找出)
例如,这个部门类中,招聘的雇员有 salary,hourly,commission 这都是抽象概念,
这些概念的行为有 setDepartment 和 都有构造行为(new)
setDepartment 这一行为是所有抽象概念共有的所以可以忽略不用修改。
剩下构造行为
对于构造行为,工厂模式为最佳选择。
对于非构造行为,策略模式为最佳选择