訪問者模式例題——擴展客戶管理的功能(CRM)

在這裏插入圖片描述
元素接口:

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);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章