说明:
- 公司客户分为企业客户和个人客户
- 目前的功能:客户提出服务申请
- 需要扩展的功能: (1)客户对公司产品的偏好分析。针对企业和个人客户有不同的分析策略。主要是根据以往购买的历史、潜在购买意向等分析。对于企业客户还要分析其所在行 业的发展趋势、客户的发展预期等 (2)客户价值分析。针对企业和个人客户,有不同的分析策略。主要根据购买的金额大小、购买的产品和服务的多少、购买的频率进行分析的。
- 潜在功能:不同客户的需求调查、满意度分析、客户消费预期分析等。 解决方案:
- 对象结构就两种:企业客户和个人客户,如何在不想改变类,又要添加新的功能。
- 定义一个接口代表要新加入的功能。
- 在客户上添加一个通用的accept方法传入代表新加入的功能对象。
- 实现新功能对象。
- 循环访问整个对象结构的类,让这个类来提供符合客户端业务需求的方法。
UML
代码
代码语言:javascript复制package 访问者模式;
public abstract class Customer {
private String customerId;
private String name;
public abstract void serviceRequest();
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
代码语言:javascript复制package 访问者模式;
public class EnterpriseCustomer extends Customer {
private String linkman;
private String linkTelephone;
private String registerAddress;
@Override
public void serviceRequest() {
System.out.println(this.getName() "企业提出服务请求");
}
public String getLinkman() {
return linkman;
}
public void setLinkman(String linkman) {
this.linkman = linkman;
}
public String getLinkTelephone() {
return linkTelephone;
}
public void setLinkTelephone(String linkTelephone) {
this.linkTelephone = linkTelephone;
}
public String getRegisterAddress() {
return registerAddress;
}
public void setRegisterAddress(String registerAddress) {
this.registerAddress = registerAddress;
}
}
代码语言:javascript复制package 访问者模式;
public class PersonalCustomer extends Customer {
private String telephone;
private int age;
@Override
public void serviceRequest() {
System.out.println("个人客户:" this.getName() " 提出服务请求");
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}