定义
将数据的处理和数据本身剥离开来,将对数据的处理交给访问者.
优点:可以针对数据进行不同的算法封装.
缺点:违背了依赖导致法则.
实例
1.元素接口
public interface Element {
//接受访问者
public void accept(IVisitor visitor);
}
2.抽象元素类
public class AbstractElement {
//工资属性
private int salary;
public void setSalary(int salary){
this.salary = salary;
}
public int getSalary(){
return this.salary;
}
}
3.元素实现类
public class ElementA extends AbstractElement implements Element{
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
public class ElementB extends AbstractElement implements Element{
@Override
public void accept(IVisitor visitor) {
visitor.visit(this);
}
}
4.访问者接口
public interface IVisitor {
public void visit(ElementA elementA);
public void visit(ElementB elementB);
}
5.访问者实现类
public class Visitor implements IVisitor{
@Override
public void visit(ElementA elementA) {
System.out.println("A类员工的工资系数为:"+elementA.getSalary()+"*1.2="+elementA.getSalary()*1.2);
}
@Override
public void visit(ElementB elementB) {
System.out.println("A类员工的工资系数为:"+elementB.getSalary()+"*1.4="+elementB.getSalary()*1.4);
}
}
6.运行
public class Client {
public static void main(String[] args) {
ElementA a = new ElementA();
ElementB b = new ElementB();
a.setSalary(5000);
b.setSalary(6000);
a.accept(new Visitor());
b.accept(new Visitor());
}
}
结果:
A类员工的工资系数为:5000*1.2=6000.0
A类员工的工资系数为:6000*1.4=8400.0