访问者模式是一种行为型设计模式,用于在不修改对象结构的情况下向其添加新操作。它涉及访问者(负责执行操作)和元素(接受访问者并执行特定操作)类。利用该模式,我们成功应用了工资计算器,为不同的员工类型(全职和兼职)计算工资,并分别得到了全职员工总工资 5000.0 和兼职员工总工资 1600.0。

Java 设计模式之访问者模式的应用
前言
访问者模式是一种行为型设计模式,它允许将新的操作应用到一系列对象结构之上,而无需修改这些对象结构的类。
立即学习“Java免费学习笔记(深入)”;
模式结构
实战案例:员工工资计算
使用访问者模式,我们可以为不同的员工类型(全职、兼职)定义一个工资计算器。
代码片段
// 访问者接口
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设计模式之访问者模式的应用的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号