public abstract class Customer{private String customerId; //客戶編號(hào) private String name;//客戶名稱 //客戶提出服務(wù)請(qǐng)求的方法 public abstract void serviceRequest();}public class EnterpriseCustomer extends Customer{ private String linkman; //聯(lián)系人 private String linkTelephone;//聯(lián)系電話 private String registerAddress;//企業(yè)注冊(cè)地址public void serviceRequest(){//企業(yè)客戶提出的具體服務(wù)請(qǐng)求System.out.println(this.getName()+"企業(yè)提出服務(wù)請(qǐng)求");}}public class PersonalCustomer extends Customer{ private String telephone;// 聯(lián)系電話 private int age;//年齡public void serviceRequest(){//個(gè)人客戶提出的具體服務(wù)請(qǐng)求System.out.println("客戶"+this.getName()+"提出服務(wù)請(qǐng)求");}
2. 模式介紹
public abstract class Element{//接受訪問(wèn)者的訪問(wèn) public abstract void accept(Visitor visitor);}//訪問(wèn)者接口
public interface Visitor{//訪問(wèn)元素A,相當(dāng)于給元素A添加訪問(wèn)者的功能 public void visitConcreteElementA(ConcreteElementA elementA);//訪問(wèn)元素B,相當(dāng)于給元素B添加訪問(wèn)者的功能 public void visitConcreteElementB(ConcreteElementB elementB);}//具體的訪問(wèn)者實(shí)現(xiàn)
public class ConcreteVisitor1 implements Visitor{public void visitConcreteElementA(ConcreteElementA element){//把去訪問(wèn)ConcreteElementA時(shí),需要執(zhí)行的功能實(shí)現(xiàn)在這里//可能需要訪問(wèn)元素已有的功能,比如:element.opertionA();}public void visitConcreteElementB(ConcreteElementB element){ element.opertionB();}}//具體元素的實(shí)現(xiàn)對(duì)象
public class ConcreteElementA extends Element{public void accept(Visitor visitor){//回調(diào)訪問(wèn)者對(duì)象的相應(yīng)方法visitor.visitConcreteElementA(this);}// 示例方法,表示元素已有的功能實(shí)現(xiàn) public void opertionA(){//已有的功能實(shí)現(xiàn)}}//對(duì)象結(jié)構(gòu),通常在這里對(duì)元素對(duì)象進(jìn)行遍歷,讓訪問(wèn)者能訪問(wèn)到所有的元素
public class ObjectStructure{//表示對(duì)象結(jié)構(gòu),可以是一個(gè)組合結(jié)構(gòu)或是集合 private Collection<Element> col = new ArrayList<Element>();//提供給客戶端操作的高層接口public void handleRequest(Visitor visitor){//循環(huán)對(duì)象結(jié)構(gòu)中的元素,接受訪問(wèn)for(Element ele : col){ele.accept(visitor);}}//組建對(duì)象結(jié)構(gòu),向?qū)ο蠼Y(jié)構(gòu)中添加元素。 public void addElement(Element ele){this.col.add(ele);}}public static void main(String[] args){//創(chuàng)建ObjectStructureObjectStructure os = new ObjectStructure();//創(chuàng)建要加入對(duì)象結(jié)構(gòu)的元素Element eleA = new ConcreteElementA();Element eleB = new ConcreteElementB();//把元素加入對(duì)象結(jié)構(gòu)os.addElement(eleA);os.addElement(eleB);//創(chuàng)建訪問(wèn)者Visitor visitor = new ConcreteVisitor1();//調(diào)用業(yè)務(wù)處理的方法os.handleRequest(visitor);}