访问者模式是一种行为型设计模式,用于在不修改对象结构的情况下向其添加新操作。它涉及访问者(负责执行操作)和元素(接受访问者并执行特定操作)类。利用该模式,我们成功应用了工资计算器,为不同的员工类型(全职和兼职)计算工资,并分别得到了全职员工总工资 5000.0 和兼职员工总工资 1600.0。
Java 设计模式之访问者模式的应用
前言
访问者模式是一种行为型设计模式,它允许将新的操作应用到一系列对象结构之上,而无需修改这些对象结构的类。
模式结构
- Visitor(访问者):定义用于访问和操作元素类的行为。
- Element(元素):定义元素类接受访问者的方法。
- ConcreteElement(具体元素):实现 Element 接口,允许接受特定类型的访问者。
- ObjectStructure(对象结构):管理元素类的容器。
实战案例:员工工资计算
使用访问者模式,我们可以为不同的员工类型(全职、兼职)定义一个工资计算器。
代码片段
// 访问者接口 interface Visitor { double visit(FullTimeEmployee fullTimeEmployee); double visit(PartTimeEmployee partTimeEmployee); } // 具体访问者:全职员工工资计算器 class FullTimeSalaryCalculator implements Visitor { @Override public double visit(FullTimeEmployee fullTimeEmployee) { return fullTimeEmployee.getMonthlySalary(); } @Override public double visit(PartTimeEmployee partTimeEmployee) { // 这里不需要实现,因为访问者只访问全职员工 throw new UnsupportedOperationException(); } } // 具体访问者:兼职员工工资计算器 class PartTimeSalaryCalculator implements Visitor { @Override public double visit(FullTimeEmployee fullTimeEmployee) { // 这里不需要实现,因为访问者只访问兼职员工 throw new UnsupportedOperationException(); } @Override public double visit(PartTimeEmployee partTimeEmployee) { return partTimeEmployee.getHourlyWage() * partTimeEmployee.getWorkingHours(); } } // 元素接口 interface Employee { void accept(Visitor visitor); } // 具体元素:全职员工 class FullTimeEmployee implements Employee { private double monthlySalary; public FullTimeEmployee(double monthlySalary) { this.monthlySalary = monthlySalary; } @Override public void accept(Visitor visitor) { visitor.visit(this); } public double getMonthlySalary() { return monthlySalary; } } // 具体元素:兼职员工 class PartTimeEmployee implements Employee { private double hourlyWage; private double workingHours; public PartTimeEmployee(double hourlyWage, double workingHours) { this.hourlyWage = hourlyWage; this.workingHours = workingHours; } @Override public void accept(Visitor visitor) { visitor.visit(this); } public double getHourlyWage() { return hourlyWage; } public double getWorkingHours() { return workingHours; } } // 对象结构:管理员工容器 class EmployeeList { private List<Employee> employees; public EmployeeList() { employees = new ArrayList<>(); } public void addEmployee(Employee employee) { employees.add(employee); } public double calculateTotalSalary(Visitor visitor) { double totalSalary = 0; for (Employee employee : employees) { totalSalary += employee.accept(visitor); } return totalSalary; } }
登录后复制
使用示例
// 创建一个员工列表 EmployeeList employees = new EmployeeList(); // 添加全职和兼职员工 employees.addEmployee(new FullTimeEmployee(5000)); employees.addEmployee(new PartTimeEmployee(20, 80)); // 创建不同的工资计算器 FullTimeSalaryCalculator fullTimeSalaryCalculator = new FullTimeSalaryCalculator(); PartTimeSalaryCalculator partTimeSalaryCalculator = new PartTimeSalaryCalculator(); // 计算全职员工的总工资 double totalFullTimeSalary = employees.calculateTotalSalary(fullTimeSalaryCalculator); // 计算兼职员工的总工资 double totalPartTimeSalary = employees.calculateTotalSalary(partTimeSalaryCalculator);
登录后复制
输出结果:
Total full-time salary: 5000.0 Total part-time salary: 1600.0
登录后复制
以上就是Java设计模式之访问者模式的应用的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:叮当,转转请注明出处:https://www.dingdanghao.com/article/467380.html