访问者实例1

现在要开发一套客户管理系统,公司的客户分为两种:企业客户和个人客户。现需要处理客户提出的服务请求、对客户进行行为预测以及分析客户价值。

Visitor

public interface Visitor {

    public interface Visitor {

    void visitPersonalCustomer(PersonalCustomer customer);

    void visitEnterpriseCustomer(EnterpriseCustomer customer);
}

Element:客户Customer

public abstract class Customer{
    public abstract void accept(Visitor visitor);
}

ConcreteElement:两种客户类型

//个人客户
public class PersonalCustomer extends Customer {

    private String name;
    private int age;

     ... 省略getter setter...

    @Override
    public void accept(Visitor visitor) {
        visitor.visitPersonalCustomer(this);
    }
}

//企业用户
public class EnterpriseCustomer extends Customer {

    private String name;

    private String address;

    ... 省略getter setter...


    @Override
    public void accept(Visitor visitor) {
        visitor.visitEnterpriseCustomer(this);
    }
}

ConcreteVisitor

ObjectStructure:客户集合

Client

可以看出,要对被访问者(通常是元素集合)增加新功能,只需要新增一个访问者类。 Element中accept哪种访问者,就可以调用该访问者实现的功能。

Last updated