




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java 設(shè)計(jì)模式 之 訪問(wèn)者模式(Visitor)商家如何收集用戶的反饋意見(jiàn) 一個(gè)生產(chǎn)高能電池的廠家,下設(shè)一個(gè)客戶服務(wù)部門(mén),其主要任務(wù)之一就是收集用戶的反饋意見(jiàn),以便改進(jìn)產(chǎn)品功能和服務(wù)質(zhì)量。 以前,客戶服務(wù)部門(mén)只是采用發(fā)放調(diào)查問(wèn)卷的方式。調(diào)查問(wèn)卷的問(wèn)題千篇一律,不能針對(duì)特殊用戶的興趣點(diǎn),尤其一些集體用戶,不會(huì)認(rèn)真對(duì)待這些問(wèn)卷,懶得把問(wèn)卷發(fā)到具體的使用者手里,而且,很多用戶不愿意花時(shí)間把調(diào)查問(wèn)卷寄回。調(diào)查結(jié)果不全面,不真實(shí),幾乎沒(méi)有任何效果。商家如何收集用戶的反饋意見(jiàn)? 之后,個(gè)性化服務(wù)、CRM客戶關(guān)系管理等概念興起,客戶服務(wù)部門(mén)引入了一套CRM客戶(用戶)關(guān)系管理系統(tǒng),對(duì)客戶信息進(jìn)行管理。針
2、對(duì)不同用戶的特點(diǎn),采用不同的調(diào)查方式。采用電話、E-Mail、傳真、問(wèn)卷、登門(mén)拜訪等多種方式,對(duì)用戶進(jìn)行調(diào)查訪問(wèn)。針對(duì)一些集體用戶,比如,企事業(yè)單位用戶,客戶服務(wù)人員首先訪問(wèn)聯(lián)系該單位集體,安排好時(shí)間之后,客戶服務(wù)人員具體訪問(wèn)每一個(gè)具體用戶,這些用戶接受客戶服務(wù)人員的訪問(wèn),給出親身使用電池產(chǎn)品的第一手資料 我們可以看到,這是一個(gè)典型的Visitor Pattern??蛻舴?wù)部門(mén)就是Visitor,不同類型的用戶就是被訪問(wèn)者。客戶服務(wù)部門(mén)(Visitor)幾乎做了所有的工作,盡量不給用戶增加負(fù)擔(dān)。定義 表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用于這些元素
3、的新操作。 從定義可以看出結(jié)構(gòu)對(duì)象是使用訪問(wèn)者模式必備條件,而且這個(gè)結(jié)構(gòu)對(duì)象必須存在遍歷自身各個(gè)對(duì)象的方法。這便類似于Java語(yǔ)言當(dāng)中的collection概念了。 本質(zhì):預(yù)留通路,實(shí)現(xiàn)回調(diào)。涉及角色1.IVisitor 抽象訪問(wèn)者角色,為該對(duì)象結(jié)構(gòu)中具體元素角色聲明一個(gè)訪問(wèn)操作接口。該操作接口的名字和參數(shù)標(biāo)識(shí)了發(fā)送訪問(wèn)請(qǐng)求給具休訪問(wèn)者的具休元素角色,這樣訪問(wèn)者就可以通過(guò)該元素角色的特定接口直接訪問(wèn)它。2.ConcreteVisitor.具體訪問(wèn)者角色,實(shí)現(xiàn)Visitor聲明的接口。3.Element 定義一個(gè)接受訪問(wèn)操作(accept(),它以一個(gè)訪問(wèn)者(Visitor)作為參數(shù)。4.Con
4、creteElement 具體元素,實(shí)現(xiàn)了抽象元素(Element)所定義的接受操作接口。涉及角色5.ObjectStructure 結(jié)構(gòu)對(duì)象角色,這是使用訪問(wèn)者模式必備的角色。它具備以下特性: 能枚舉它的元素; 可以提供一個(gè)高層接口以允許訪問(wèn)者訪問(wèn)它的元素; 如有需要,可以設(shè)計(jì)成一個(gè)復(fù)合對(duì)象或者一個(gè)聚集(如一個(gè)列表或無(wú)序集合)。示例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(現(xiàn)在對(duì)企業(yè)客戶 + ec.getName() + 進(jìn)行產(chǎn)品偏好分析); public void visitPersonalCustomer(PersonalCustomer pc) Syste
6、m.out.println(現(xiàn)在對(duì)個(gè)人客戶 + pc.getName() + 進(jìn)行產(chǎn)品偏好分析); ConcreteVisitorServiceRequestVisitorpublic class ServiceRequestVisitor implements Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec) System.out.println(ec.getName() + 企業(yè)提出服務(wù)請(qǐng)求); public void visitPersonalCustomer(PersonalCustomer pc) S
7、ystem.out.println(客戶 + pc.getName() + 提出服務(wù)請(qǐng)求); 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集團(tuán)); 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); 測(cè)試結(jié)果訪問(wèn)者模式的優(yōu)點(diǎn) 好的擴(kuò)展性:能在不修改對(duì)象結(jié)構(gòu)的前提下,為對(duì)象結(jié)構(gòu)中的元素添加新功能。 好的復(fù)用性:可以通過(guò)訪問(wèn)者來(lái)定義整個(gè)對(duì)象結(jié)構(gòu)通用的功能,從而提高復(fù)用的程度。 分離無(wú)關(guān)行為:把相關(guān)的行為封裝在一起,構(gòu)成一個(gè)訪問(wèn)者,這樣每個(gè)訪問(wèn)者都比較單一。訪問(wèn)者模式的缺點(diǎn) 對(duì)象結(jié)構(gòu)很難變化:不適用于對(duì)象結(jié)構(gòu)中類經(jīng)常變化的情況,因?yàn)閷?duì)象結(jié)構(gòu)發(fā)生了改變,訪問(wèn)者的接口和訪問(wèn)者得實(shí)現(xiàn)都要發(fā)生相應(yīng)的改變,代價(jià)太高。 破壞封裝:通常需要對(duì)象結(jié)構(gòu)開(kāi)放內(nèi)部數(shù)據(jù)給訪問(wèn)者,ObjectStructure破壞了對(duì)象的封裝性。適用情況 1) 一個(gè)對(duì)象結(jié)構(gòu)包含很多類對(duì)象,它們有不同的接口,而你想對(duì)這些對(duì)象實(shí)施一些依賴于其具體類的操作。 2)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 零售業(yè)店鋪顧客流量分析與營(yíng)銷(xiāo)策略考核試卷
- 針織品銷(xiāo)售區(qū)域布局優(yōu)化考核試卷
- 重疾險(xiǎn)產(chǎn)品設(shè)計(jì)
- 胸痛常見(jiàn)疾病及診斷
- 班主任六一匯報(bào)工作總結(jié)
- 沖管操作與感染防控要點(diǎn)
- 妊高征的急救處理
- 中醫(yī)外科疾病診療概要
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度模板三
- 港股6月IPO火熱給港股投資帶來(lái)更多選擇
- 2025年報(bào)關(guān)操作技巧與核心要點(diǎn)
- 2025年統(tǒng)編版小學(xué)語(yǔ)文五年級(jí)下冊(cè)期末綜合測(cè)試題及參考答案
- 浙江臨安招聘事業(yè)編制筆試真題2024
- 2024-2025學(xué)年人教版八年級(jí)數(shù)學(xué)下冊(cè)期末綜合復(fù)習(xí)解答壓軸題培優(yōu)提升專題訓(xùn)練+
- DB62T 4130-2020 公路混凝土構(gòu)件蒸汽養(yǎng)護(hù)技術(shù)規(guī)程
- 洗浴中心保安合同范本
- 行政人事部所需各類表格模板
- 2024北京西城區(qū)六年級(jí)畢業(yè)考英語(yǔ)試題及答案
- 《基礎(chǔ)護(hù)理學(xué)》第七版考試題庫(kù)大全-上部分(600題)
- 大學(xué)計(jì)算機(jī)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋廣西師范大學(xué)
評(píng)論
0/150
提交評(píng)論