Replace Type Code with State/Strategy
介绍
这个是针对ReplaceTypeCodeWithSubclasses的优化版本
例子
package com.gupao.reorganizedata_8;
/**
*
* 这个是针对ReplaceTypeCodeWithSubclasses的优化版本。
* 如果类型码会改变,或者员工类已经有子类了,那么使用子类来代替类型码就不合适了。
* 比如在此例子中类型码发生了改变(升职加薪)就非常适合ReplaceTypeCodeWithStrategy
*/
public class ReplaceTypeCodeWithStrategy_15 {
private static class Employee{
static final int ENGINEER = 0;
static final int SALESMAN = 1;
static final int MANAGER = 2;
private EmployeeType employeeType;
public EmployeeType getEmployeeType() {
return employeeType;
}
public void setEmployeeType(EmployeeType employeeType) {
this.employeeType = employeeType;
}
int getType(){
return employeeType.getTypeCode();
}
double calculatorSalary(){
return employeeType.calculatorSalary();
}
}
private static abstract class EmployeeType{
abstract int getTypeCode();
abstract double calculatorSalary();
}
private static class Engineer extends EmployeeType{
@Override
int getTypeCode() {
return Employee.ENGINEER;
}
@Override
double calculatorSalary() {
return 100;
}
}
private static class Salesman extends EmployeeType {
@Override
int getTypeCode() {
return Employee.SALESMAN;
}
@Override
public double calculatorSalary(){
return 200;
}
}
private static class Manager extends EmployeeType {
@Override
int getTypeCode() {
return Employee.MANAGER;
}
@Override
public double calculatorSalary(){
return 500;
}
}
public static void main(String[] args) {
Employee employee = new Employee();
employee.setEmployeeType(new Engineer());
System.out.println(employee.calculatorSalary());
//升职加薪
employee.setEmployeeType(new Manager());
System.out.println(employee.calculatorSalary());
}
}