gpt4 book ai didi

java - 访客模式的使用

转载 作者:行者123 更新时间:2023-12-02 02:56:08 25 4
gpt4 key购买 nike

我有一堂这样的课

 public  EmployeeRepositoryImpl{
public Employee save(final Employee employee) {

return employeeDao.save(sanitizeEmployee(employee));
}

Employee sanitizeEmployee(Employee employee){

employee.setName(cleanUpBadData(employee.getName());
employee.setPhone(cleanUpBadData(employee.getPhone());
employee.setAddress(cleanUpBadData(employee.getAddress());
......

return employee;
}

private static String cleanUpBadData(String attribute) {
//cleanbaddata here
return attribute;
}
}

我想使用访问者模式重构这个,以防明天我们需要添加额外的逻辑,例如我今天添加的清理。我不确定我是否正确地执行了访问者模式,因为我没有接受方法和 Visitable。任何人都可以更正吗我知道正确的方法。

我创建了

public interface EmployeeVisitor {


void visitEmployee(Employee employee);

}

public class EmployeeVisitorImpl implements EmployeeVisitor {

public void visitEmployee(Employee employee)
{

employee.setName(cleanUpBadData(employee.getName());
employee.setPhone(cleanUpBadData(employee.getPhone());
employee.setAddress(cleanUpBadData(employee.getAddress());
......

return employee;
}

private static String cleanUpBadData(String attribute) {
//cleanbaddata here
return attribute;
}

}

最佳答案

访问者模式的正确实现如下所示:

interface EmployeeVisitor {
void visitEmployee(Employee employee);
}

class CleanUpEmployee implements EmployeeVisitor {
void visitEmployee(Employee employee) {
...
}
}

class Employee {
void accept(EmployeeVisitor visitor) {
visitor.visitEmployee(this);
}
}

访问者模式专门设计用于将一个或多个算法与其所操作的类结构分开。除非您试图使算法独立于某个类结构,否则访问者模式毫无意义。在您的情况下,您似乎没有任何 Employee 扩展,因此使用访问者实际上没有任何值(value) - 只需创建该类的算法方法即可。

如果您的目的是能够向类添加额外的操作而不更改它,那么还有其他模式可能更有用。例如https://en.wikipedia.org/wiki/Strategy_pattern允许在运行时选择行为并且 https://en.wikipedia.org/wiki/Command_pattern允许行为与其上下文一起封装。

关于java - 访客模式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43059789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com