Java 设计模式 之 访问者模式(Visitor)课件

上传人:我*** 文档编号:139676167 上传时间:2020-07-23 格式:PPT 页数:23 大小:301.50KB
返回 下载 相关 举报
Java 设计模式 之 访问者模式(Visitor)课件_第1页
第1页 / 共23页
Java 设计模式 之 访问者模式(Visitor)课件_第2页
第2页 / 共23页
Java 设计模式 之 访问者模式(Visitor)课件_第3页
第3页 / 共23页
Java 设计模式 之 访问者模式(Visitor)课件_第4页
第4页 / 共23页
Java 设计模式 之 访问者模式(Visitor)课件_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《Java 设计模式 之 访问者模式(Visitor)课件》由会员分享,可在线阅读,更多相关《Java 设计模式 之 访问者模式(Visitor)课件(23页珍藏版)》请在金锄头文库上搜索。

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、数。 4.ConcreteElement 具体元素,实现了抽象元素(Element)所定义的接受操作接口。,涉及角色,5.ObjectStructure 结构对象角色,这是使用访问者模式必备的角色。它具备以下特性: 能枚举它的元素; 可以提供一个高层接口以允许访问者访问它的元素; 如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)。,示例,IVisitor Visitor,public interface Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec); public void visitP

5、ersonalCustomer(PersonalCustomer pc); ,ConcreteVisitorPredilectionAnalyzeVisitor,public class PredilectionAnalyzeVisitor implements Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec) System.out.println(现在对企业客户 + ec.getName() + 进行产品偏好分析); public void visitPersonalCustomer(PersonalCust

6、omer pc) System.out.println(现在对个人客户 + pc.getName() + 进行产品偏好分析); ,ConcreteVisitorServiceRequestVisitor,public class ServiceRequestVisitor implements Visitor public void visitEnterpriseCustomer(EnterpriseCustomer ec) System.out.println(ec.getName() + 企业提出服务请求); public void visitPersonalCustomer(Person

7、alCustomer pc) System.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 ge

8、tName() return name; public void setName(String name) this.name = name; public abstract void accept(Visitor visitor); ,ConcreteElementEnterpriseCustomer,public class EnterpriseCustomer extends Customer private String linkman; private String linkTelephone; private String registerAddress; public Strin

9、g getLinkman() return 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 getRegisterAddr

10、ess() return registerAddress; public void setRegisterAddress(String registerAddress) this.registerAddress = registerAddress; public void accept(Visitor visitor) visitor.visitEnterpriseCustomer(this); ,ConcreteElementPersonalCustomer,public class PersonalCustomer extends Customer private String telep

11、hone; private int age; public String getTelephone() return telephone; public void setTelephone(String telephone) this.telephone = telephone; public int getAge() return age; ,ConcreteElementPersonalCustomer,public void setAge(int age) this.age = age; public void accept(Visitor visitor) visitor.visitP

12、ersonalCustomer(this); ,ObjectStructure ObjectStructure,public 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); ,Client,public class Client pub

13、lic static void main(String 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.a

14、ddElement(cm3);,Client,ServiceRequestVisitor srVisitor = new ServiceRequestVisitor(); os.handleRequest(srVisitor); PredilectionAnalyzeVisitor paVisitor = new PredilectionAnalyzeVisitor(); os.handleRequest(paVisitor); ,测试结果,访问者模式的优点,好的扩展性:能在不修改对象结构的前提下,为对象结构中的元素添加新功能。 好的复用性:可以通过访问者来定义整个对象结构通用的功能,从而提高

15、复用的程度。 分离无关行为:把相关的行为封装在一起,构成一个访问者,这样每个访问者都比较单一。,访问者模式的缺点,对象结构很难变化:不适用于对象结构中类经常变化的情况,因为对象结构发生了改变,访问者的接口和访问者得实现都要发生相应的改变,代价太高。 破坏封装:通常需要对象结构开放内部数据给访问者,ObjectStructure破坏了对象的封装性。,适用情况,1) 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 2) 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor模式使得你可以将相关的操作集中起来 定义在一个类中。 3) 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。 4) 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号