Java 工厂方法模式:构建灵活的薪资计算系统
Java 工厂方法模式:构建灵活的薪资计算系统
需求场景: 一家新创公司需要一个薪资计算系统,需要满足以下条件:
a) 目前公司只有三种职位:经理 (Manager)、销售 (Sales) 和程序员 (Programmer)。b) 公司未来会扩大规模,职位种类也会增加。c) 每位员工 (Employee) 的薪资包含工资 (Salary) 和奖金 (Bonus)。
解决方案: 使用工厂方法模式设计该薪资计算系统。
1. 为什么选择工厂方法模式?
工厂方法模式是一种创建型设计模式,它将对象的创建委托给子类。这种方式的优势在于:
- 可扩展性强: 当新增职位时,只需添加新的职位类和对应的工厂方法,无需修改现有代码,符合开闭原则。* 解耦合: 调用方无需关心具体对象的创建细节,只需关注使用对象。
2. 代码示例:
以下是使用 Java 代码实现的简单示例:
**2.1 抽象 Employee 类:**javapublic abstract class Employee { protected String name; protected String position; protected float salary; protected float bonus;
public Employee(String name, String position, float salary, float bonus) { this.name = name; this.position = position; this.salary = salary; this.bonus = bonus; }
public abstract float calculateSalary();
public String getName() { return name; }
public String getPosition() { return position; }
public float getSalary() { return salary; }
public float getBonus() { return bonus; }}
**2.2 具体职位类:**javapublic class Manager extends Employee { public Manager(String name, String position, float salary, float bonus) { super(name, position, salary, bonus); }
@Override public float calculateSalary() { return salary + bonus; }}
public class Sales extends Employee { public Sales(String name, String position, float salary, float bonus) { super(name, position, salary, bonus); }
@Override public float calculateSalary() { return salary + bonus; }}
public class Programmer extends Employee { public Programmer(String name, String position, float salary, float bonus) { super(name, position, salary, bonus); }
@Override public float calculateSalary() { return salary + bonus; }}
**2.3 EmployeeFactory 工厂类:**javapublic class EmployeeFactory { public static Employee createEmployee(String name, String position, float salary, float bonus) { if (position.equals('Manager')) { return new Manager(name, position, salary, bonus); } else if (position.equals('Sales')) { return new Sales(name, position, salary, bonus); } else if (position.equals('Programmer')) { return new Programmer(name, position, salary, bonus); } throw new IllegalArgumentException('Invalid position: ' + position); }}
**2.4 测试类:**javapublic class Main { public static void main(String[] args) { Employee manager = EmployeeFactory.createEmployee('John', 'Manager', 5000, 1000); Employee sales = EmployeeFactory.createEmployee('Alice', 'Sales', 3000, 500); Employee programmer = EmployeeFactory.createEmployee('Bob', 'Programmer', 4000, 800);
System.out.println(manager.getName() + ': ' + manager.calculateSalary()); System.out.println(sales.getName() + ': ' + sales.calculateSalary()); System.out.println(programmer.getName() + ': ' + programmer.calculateSalary()); }}
3. 总结:
通过使用工厂方法模式,我们创建了一个可扩展的薪资计算系统。当需要添加新职位时,只需创建新的职位类和对应的工厂方法,而无需修改现有代码,提高了代码的可维护性和可扩展性。
原文地址: https://www.cveoy.top/t/topic/E0E 著作权归作者所有。请勿转载和采集!