




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java 設計模式 之 訪問者模式(Visitor)商家如何收集用戶的反饋意見 一個生產高能電池的廠家,下設一個客戶服務部門,其主要任務之一就是收集用戶的反饋意見,以便改進產品功能和服務質量。 以前,客戶服務部門只是采用發放調查問卷的方式。調查問卷的問題千篇一律,不能針對特殊用戶的興趣點,尤其一些集體用戶,不會認真對待這些問卷,懶得把問卷發到具體的使用者手里,而且,很多用戶不愿意花時間把調查問卷寄回。調查結果不全面,不真實,幾乎沒有任何效果。商家如何收集用戶的反饋意見? 之后,個性化服務、CRM客戶關系管理等概念興起,客戶服務部門引入了一套CRM客戶(用戶)關系管理系統,對客戶信息進行管理。針
2、對不同用戶的特點,采用不同的調查方式。采用電話、E-Mail、傳真、問卷、登門拜訪等多種方式,對用戶進行調查訪問。針對一些集體用戶,比如,企事業單位用戶,客戶服務人員首先訪問聯系該單位集體,安排好時間之后,客戶服務人員具體訪問每一個具體用戶,這些用戶接受客戶服務人員的訪問,給出親身使用電池產品的第一手資料 我們可以看到,這是一個典型的Visitor Pattern。客戶服務部門就是Visitor,不同類型的用戶就是被訪問者。客戶服務部門(Visitor)幾乎做了所有的工作,盡量不給用戶增加負擔。定義 表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用于這些元素
3、的新操作。 從定義可以看出結構對象是使用訪問者模式必備條件,而且這個結構對象必須存在遍歷自身各個對象的方法。這便類似于Java語言當中的collection概念了。 本質:預留通路,實現回調。涉及角色1.IVisitor 抽象訪問者角色,為該對象結構中具體元素角色聲明一個訪問操作接口。該操作接口的名字和參數標識了發送訪問請求給具休訪問者的具休元素角色,這樣訪問者就可以通過該元素角色的特定接口直接訪問它。2.ConcreteVisitor.具體訪問者角色,實現Visitor聲明的接口。3.Element 定義一個接受訪問操作(accept(),它以一個訪問者(Visitor)作為參數。4.Con
4、creteElement 具體元素,實現了抽象元素(Element)所定義的接受操作接口。涉及角色5.ObjectStructure 結構對象角色,這是使用訪問者模式必備的角色。它具備以下特性: 能枚舉它的元素; 可以提供一個高層接口以允許訪問者訪問它的元素; 如有需要,可以設計成一個復合對象或者一個聚集(如一個列表或無序集合)。示例IVisitor Visitor public interface Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec); public void visitPersonalCusto
5、mer(PersonalCustomer pc); ConcreteVisitorPredilectionAnalyzeVisitorpublic class PredilectionAnalyzeVisitor implements Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec) System.out.println(現在對企業客戶 + ec.getName() + 進行產品偏好分析); public void visitPersonalCustomer(PersonalCustomer pc) Syste
6、m.out.println(現在對個人客戶 + pc.getName() + 進行產品偏好分析); ConcreteVisitorServiceRequestVisitorpublic class ServiceRequestVisitor implements Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec) System.out.println(ec.getName() + 企業提出服務請求); public void visitPersonalCustomer(PersonalCustomer pc) S
7、ystem.out.println(客戶 + pc.getName() + 提出服務請求); Element Customer public abstract class Customer private String customerId; private String name; public String getCustomerId() return customerId; public void setCustomerId(String customerId) this.customerId = customerId; public String getName() return na
8、me; public void setName(String name) = name; public abstract void accept(Visitor visitor); ConcreteElementEnterpriseCustomerpublic class EnterpriseCustomer extends Customer private String linkman; private String linkTelephone; private String registerAddress; public String getLinkman() retu
9、rn linkman; public void setLinkman(String linkman) this.linkman = linkman; public String getLinkTelephone() return linkTelephone; ConcreteElementEnterpriseCustomer public void setLinkTelephone(String linkTelephone) this.linkTelephone = linkTelephone; public String getRegisterAddress() return registe
10、rAddress; public void setRegisterAddress(String registerAddress) this.registerAddress = registerAddress; public void accept(Visitor visitor) visitor.visitEnterpriseCustomer(this); ConcreteElementPersonalCustomerpublic class PersonalCustomer extends Customer private String telephone; private int age;
11、 public String getTelephone() return telephone; public void setTelephone(String telephone) this.telephone = telephone; public int getAge() return age; ConcreteElementPersonalCustomerpublic void setAge(int age) this.age = age; public void accept(Visitor visitor) visitor.visitPersonalCustomer(this); O
12、bjectStructure ObjectStructurepublic class ObjectStructure private Collection col = new ArrayList(); public void handleRequest(Visitor visitor) for(Customer cm : col) cm.accept(visitor); public void addElement(Customer ele) this.col.add(ele); Clientpublic class Client public static void main(String
13、args) ObjectStructure os = new ObjectStructure(); Customer cml = new EnterpriseCustomer(); cml.setName(ABC集團); os.addElement(cml); Customer cm2 = new EnterpriseCustomer(); cm2.setName(CDE公司); os.addElement(cm2); Customer cm3 = new PersonalCustomer(); cm3.setName(張三); os.addElement(cm3); ClientServic
14、eRequestVisitor srVisitor = new ServiceRequestVisitor(); os.handleRequest(srVisitor); PredilectionAnalyzeVisitor paVisitor = new PredilectionAnalyzeVisitor(); os.handleRequest(paVisitor); 測試結果訪問者模式的優點 好的擴展性:能在不修改對象結構的前提下,為對象結構中的元素添加新功能。 好的復用性:可以通過訪問者來定義整個對象結構通用的功能,從而提高復用的程度。 分離無關行為:把相關的行為封裝在一起,構成一個訪問者,這樣每個訪問者都比較單一。訪問者模式的缺點 對象結構很難變化:不適用于對象結構中類經常變化的情況,因為對象結構發生了改變,訪問者的接口和訪問者得實現都要發生相應的改變,代價太高。 破壞封裝:通常需要對象結構開放內部數據給訪問者,ObjectStructure破壞了對象的封裝性。適用情況 1) 一個對象結構包含很多類對象,它們有不同的接口,而你想對這些對象實施一些依賴于其具體類的操作。 2)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 零售業店鋪顧客流量分析與營銷策略考核試卷
- 針織品銷售區域布局優化考核試卷
- 重疾險產品設計
- 胸痛常見疾病及診斷
- 班主任六一匯報工作總結
- 沖管操作與感染防控要點
- 妊高征的急救處理
- 中醫外科疾病診療概要
- 事故隱患內部報告獎勵制度模板三
- 港股6月IPO火熱給港股投資帶來更多選擇
- 2025年報關操作技巧與核心要點
- 2025年統編版小學語文五年級下冊期末綜合測試題及參考答案
- 浙江臨安招聘事業編制筆試真題2024
- 2024-2025學年人教版八年級數學下冊期末綜合復習解答壓軸題培優提升專題訓練+
- 2025年高考數學全國一卷試題真題及答案詳解(精校打印)
- DB62T 4130-2020 公路混凝土構件蒸汽養護技術規程
- 洗浴中心保安合同范本
- 行政人事部所需各類表格模板
- 2024北京西城區六年級畢業考英語試題及答案
- 《基礎護理學》第七版考試題庫大全-上部分(600題)
- 大學計算機知到智慧樹章節測試課后答案2024年秋廣西師范大學
評論
0/150
提交評論