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. 总结:

通过使用工厂方法模式,我们创建了一个可扩展的薪资计算系统。当需要添加新职位时,只需创建新的职位类和对应的工厂方法,而无需修改现有代码,提高了代码的可维护性和可扩展性。

Java 工厂方法模式:构建灵活的薪资计算系统

原文地址: https://www.cveoy.top/t/topic/E0E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录