元素接口:
public abstract class Customer {
public abstract void accept(Visitor visitor);
}
企業客戶類:
public class Encustomer extends Customer {
@Override
public void accept(Visitor visitor) {
visitor.enShow(this);
}
}
個人客戶類:
public class Incustomer extends Customer {
@Override
public void accept(Visitor visitor) {
visitor.inShow(this);
}
}
訪問接口:
public abstract class Visitor {
public abstract void inShow(Incustomer incustomer);
public abstract void enShow(Encustomer encustomer);
}
具體訪問類:
public class Application extends Visitor {
@Override
public void inShow(Incustomer incustomer) {
System.out.println("個人客戶提出服務申請");
}
@Override
public void enShow(Encustomer encustomer) {
System.out.println("企業客戶提出服務申請");
}
}
public class Value extends Visitor {
@Override
public void inShow(Incustomer incustomer) {
System.out.println("個人客戶價值分析");
}
@Override
public void enShow(Encustomer encustomer) {
System.out.println("企業客戶價值分析");
}
}
public class Product extends Visitor {
@Override
public void inShow(Incustomer incustomer) {
System.out.println("個人客戶對產品偏好分析");
}
@Override
public void enShow(Encustomer encustomer) {
System.out.println("企業客戶對產品偏好分析");
}
}
ObjectStructure提供一個高層的接口:以允許訪問者訪問它的元素
public class ObjectStructure {
private List<Customer> customers=new ArrayList<Customer>();
public void add(Customer customer) {
customers.add(customer);
}
public void remove(Customer customer) {
customers.remove(customer);
}
public void display(Visitor visitor) {
for(Customer customer:customers) {
customer.accept(visitor);
}
}
}
測試類:
public class Main {
public static void main(String[] args) {
ObjectStructure objectStructure=new ObjectStructure();
Encustomer encustomer=new Encustomer();
Incustomer incustomer=new Incustomer();
objectStructure.add(incustomer);
objectStructure.add(encustomer);
Application application=new Application();
Value value=new Value();
Product product=new Product();
objectStructure.display(application);
objectStructure.display(value);
objectStructure.display(product);
}
}