设计模式(19)-访问者模式

定义
将数据的处理和数据本身剥离开来,将对数据的处理交给访问者.
优点:可以针对数据进行不同的算法封装.
缺点:违背了依赖导致法则.

实例
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

猜你喜欢

转载自blog.csdn.net/chixiaoen/article/details/79498982
今日推荐