访问者模式将数据和对数据的操作分离开来,使其在不改变数据结构的前提下动态添加作用于这些元素上的操作。它将数据结构的定义和数据操作的定义分离开来,符合“单一职责”原则。访问者模式通过定义不同的访问者实现对数据的不同操作,因此在需要给数据添加新的操作时只需为其定义一个新的访问者即可。

适用于数据结构稳定但是数据操作方式多变的系统中。

 

设计模式之 访问者模式

(1)定义元素

public interface Element{
    void accept(Visitor visitor);
}

public class ProjectElement implements Element{
    private String projectName;
    private String projectContent;
    private String visitorName;
    private Date visitorTime;
    
    public ProjectElement(String projectName,String projectContent){
        this.projectName = projectName;
        this.projectContent = projectContent;
    }
    @Override
    public void accept(Visitor visitor){
        visitor.visit(this);
    }
    public void signature(String visitorName,Date visitorTime){
        this.visitorName = visitorName;
        this.visitorTime = visitorTime;
    }
}

(2)定义访问者

public interface Visitor{
    void visit(ProjectElement element);
}

public class CEOVisitor implements Visitor{
    private final static Log logger = LogFactory.getLog(this.getClass());

    @Override
    public void visit(ProjectElement element) {
        logger.info("CEO Visitor");
        element.signature("CEO",new Date());
    }
}

public class CTOVisitor implements Visitor{
    private final static Log logger = LogFactory.getLog(this.getClass());

    @Override
    public void visit(ProjectElement element) {
        logger.info("CTO Visitor");
        element.signature("CTO",new Date());
    }
}

(3)使用访问者模式

public static void main(String[] args){
    Element element = new ProjectElement("mobike","share bicycle");
    element.accept(new CTOVisitor());
    element.accept(new CEOVisitor());
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


设计模式之 访问者模式