当前位置: 首页 > news >正文

泉州企业制作网站网站建设竞价托管外包

泉州企业制作网站,网站建设竞价托管外包,搜索引擎推广与优化,二维码在线制作1、简介 1.1、概述 访问者模式是一种较为复杂的行为型设计模式#xff0c;它包含访问者和被访问元素两个主要组成部分。这些被访问的元素通常具有不同的类型#xff0c;且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系…1、简介 1.1、概述 访问者模式是一种较为复杂的行为型设计模式它包含访问者和被访问元素两个主要组成部分。这些被访问的元素通常具有不同的类型且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能为这些不同类型的元素增加新的操作。 在使用访问者模式时被访问的元素通常不是单独存在的它们存储在一个集合中这个集合称为“对象结构”。访问者通过遍历对象结构实现对其中存储的元素的逐个操作。 1.2、定义 访问者模式Visitor Pattern提供一个作用于某对象结构中的各元素的操作表示它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。 2、解析 2.1、UML类图 访问者模式的结构较为复杂其结构如下图所示。 可以看出在访问者模式结构图中包含以下5个角色 Visitor抽象访问者抽象访问者为对象结构中每个具体元素类ConcreteElement声明一个访问操作从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型。具体访问者需要实现这些操作方法提供对这些元素的访问操作。ConcreteVisitor具体访问者具体访问者实现了每个由抽象访问者声明的操作每个操作用于访问对象结构中一种类型的元素。Element抽象元素抽象元素一般是抽象类或者接口它定义一个accept方法该方法通常以一个抽象访问者作为参数。ConcreteElement具体元素具体元素实现了accept方法在accept方法中调用访问者的访问方法以便完成对一个元素的操作。ObjectStructure对象结构对象结构是一个元素的集合它用于存放元素对象并且提供了遍历其内部元素的方法。它可以结合组合模式来实现也可以是一个简单的集合对象例如一个List对象或一个Set对象。 访问者模式中对象结构存储了不同类型的元素对象以供不同访问者访问。访问者模式包括两个层次结构一个是访问者层次结构提供了抽象访问者和具体访问者另一个是元素层次结构提供了抽象元素和具体元素。相同的访问者可以以不同的方式访问不同的元素相同的元素可以接受不同访问者以不同访问方式访问。在访问者模式中增加新的访问者无须修改原有系统系统具有较好的可扩展性。 2.2、代码示例 在访问者模式中抽象访问者定义了访问元素对象的方法。通常为每一种类型的元素对象都提供一个访问方法而具体访问者可以实现这些访问方法。这些访问方法的命名一般有两种方式一种是直接在方法名中标明待访问元素对象的具体类型例如visitElementAElementA elementA另一种是统一取名为visit通过参数类型的不同来定义一系列重载的visit方法。当然如果所有的访问者对某一类型的元素的访问操作都相同则可以将操作代码移到抽象访问者类中。其典型代码如下 /*** Description: 抽象访问者* Author: yangyongbing* CreateTime: 2023/08/03* Version: 1.0*/ abstract class Visitor {public abstract void visit(ConcreteElementA elementA);public abstract void visit(ConcreteElementB elementA);public void visit(ConcreteElementC concreteElementc){// 元素ConcreteElementC操作代码} } 在这里使用了重载visit方法的方式来定义多个方法用于操作不同类型的元素对象。在抽象访问者Visitor类的子类ConcreteVisitor中实现了抽象的访问方法用于定义对不同类型元素对象的操作。具体访问者类典型代码如下 /*** Description:* Author: yangyongbing* CreateTime: 2023/08/03 21:38* Version: 1.0*/ public class ConcreteVisitor extends Visitor{Overridepublic void visit(ConcreteElementA elementA) {// 元素 ConcreteElementA操作代码}Overridepublic void visit(ConcreteElementB elementA) {// 元素 ConcreteElementB操作代码} }对于元素类而言在其中一般都定义了一个accept方法用于接受访问者的访问。典型的抽象元素类代码如下 /*** Description: 抽象元素* Author: yangyongbing* CreateTime: 2023/08/03 21:32* Version: 1.0*/ interface Element {void accept(Visitor visitor); } 需要注意的是该方法传入了一个抽象访问者Visitor类型的参数即针对抽象访问者进行编程而不是具体访问者。在程序运行时再确定具体访问者的类型并调用具体访问者对象的visit方法实现对元素对象的操作。在抽象元素类Element的子类中实现了accept方法用于接受访问者的访问。在具体元素类中还可以定义不同类型的元素所特有的业务方法其典型代码如下 /*** Description: 具体元素* Author: yangyongbing* CreateTime: 2023/08/03* Version: 1.0*/ public class ConcreteElementA implements Element{Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void operationA(){// 业务方法} }在具体元素类ConcreteElementA的accept方法中通过调用Visitor类的visit方法实现对元素的访问并以当前对象作为visit方法的参数。其具体执行过程如下 1调用具体元素类的acceptVisitor visitor方法并将Visitor子类对象作为其参数。 2在具体元素类acceptVisitor visitor方法内部调用传入的Visitor对象的visit方法例如visitConcreteElementA elementA。将当前具体元素类对象this作为参数例如visitor.visitthis。 3执行Visitor对象的visit方法在其中还可以调用具体元素对象的业务方法。 这种调用机制也称为“双重分派”。正因为使用了双重分派机制使得增加新的访问者无须修改现有类库代码只需将新的访问者对象作为参数传入具体元素对象的accept方法。程序运行时将回调在新增Visitor类中定义的visit方法从而增加新的元素访问方式。 在访问者模式中对象结构是一个集合它用于存储元素对象并接受访问者的访问其典型代码如下 /*** Description: 对象结构* Author: yangyongbing* CreateTime: 2023/08/03 21:48* Version: 1.0*/ public class ObjectStructure {// 定义一个集合用于存储元素对象private ListElement listnew ArrayList();// 接受访问者的访问操作public void accept(Visitor visitor){IteratorElement iterator list.iterator();while (iterator.hasNext()){// 遍历访问集合中的每一个元素iterator.next().accept(visitor);}}public void addElement(Element element){list.add(element);}public void removeElement(Element element){list.remove(element);} }在对象结构中可以使用迭代器对存储在集合中的元素对象进行遍历并逐个调用每一个对象的accept方法实现对元素对象的访问操作。 2.3、访问者模式与组合模式联用 在访问者模式中包含一个用于存储元素对象集合的对象结构通常可以使用迭代器来遍历对象结构。具体元素之间如果存在整体与部分关系有些元素作为容器对象有些元素作为成员对象则可以使用组合模式来组织元素。引入组合模式后的访问者模式结构图如下图所示。 需要注意的是在上图所示结构中由于叶子元素的遍历操作已经在容器元素中完成因此要防止单独将已增加到容器元素中的叶子元素再次加入对象结构中。对象结构中只保存容器元素和孤立的叶子元素。 3、访问者模式总结 由于访问者模式的使用条件较为苛刻本身结构也较为复杂因此在实际应用中使用频率不是特别高。当系统中存在一个较为复杂的对象结构且不同访问者对其所采取的操作也不相同时可以考虑使用访问者模式进行设计。在XML文档解析、编译器的设计、复杂集合对象的处理等领域访问者模式得到了一定的应用。 3.1、主要优点 增加新的访问操作很方便。使用访问者模式增加新的访问操作就意味着增加一个新的具体访问者类实现简单无须修改源代码符合开闭原则。将有关元素对象的访问行为集中到一个访问者对象中而不是分散在一个个的元素类中。类的职责更加清晰有利于对象结构中元素对象的复用相同的对象结构可以供多个不同的访问者访问。让用户能够在不修改现有元素类层次结构的情况下定义作用于该层次结构的操作。 3.2、主要缺点 增加新的元素类很困难。在访问者模式中每增加一个新的元素类都意味着要在抽象访问者角色中增加一个新的抽象操作并在每一个具体访问者类中增加相应的具体操作这违背了开闭原则的要求。破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作这意味着元素对象有时候必须暴露一些自己的内部操作和内部状态否则无法供访问者访问。 3.3、适用场景 一个对象结构包含多种类型的对象希望对这些对象实施一些依赖其具体类型的操作。在访问者中针对每一种具体的类型都提供了一个访问操作不同类型的对象可以有不同的访问操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作而且需要避免让这些操作“污染”这些对象的类也不希望在增加新操作时修改这些类。访问者模式将相关的访问操作集中起来定义在访问者类中对象结构可以被多个不同的访问者类所使用将对象本身与对象的访问操作分离。对象结构中元素对象对应的类很少改变但经常需要在此对象结构上定义新的操作。
http://www.zqtcl.cn/news/721589/

相关文章:

  • 如何建立电子商务网站网站制作地点
  • 网站建设设计目的memcached wordpress
  • 潍坊作风建设年网站上海到北京火车时刻表查询
  • 网站建设 项目要求手机软件app
  • 什么是做网站wordpress 七牛视频
  • 家乡网站建设策划书angular做的网站
  • 土豆网网站开发源代码thinkphp5做的网站
  • lng企业自建站wordpress 分页 美化
  • 手机版网站如何做新闻类网站怎么做百度推广
  • 网站开发工程师 上海合肥网站到首页排名
  • 商城网站后续费用请人代做谷歌外贸网站
  • 汽车网站有哪些3d家装效果图制作软件
  • 荆门做网站公众号的公司网站百度不收录的原因
  • 专门做羽毛球的网站福州seo网站排名
  • 网站返回503的含义是门户网站开发合同
  • 自己做网站的成本要哪些东西wordpress模板如何管理系统
  • 做一般的网站要多久wordpress写文章页面无法显示
  • 人和兽做的网站视频汽车建设网站开发流程
  • 长春市建设工程造价管理协会网站厦门网站建设费用
  • 广东建设信息公开网站怎样策划一个营销型网站
  • 魔兽做图下载网站如何经营一个购物网站
  • 深圳做网站哪个平台好一级消防工程师考试题型
  • 网站婚礼服务态网站建设论文网站设计有限公司是干嘛的
  • 邯郸网站建设效果好广西做网站的公司
  • 网站logo上传营销型网站制作方案
  • 小说网站静态模板站长工具seo综合查询adc
  • 北京响应式网站做logo那个网站
  • 如何申请免费网站空间刚察县wap网站建设公司
  • 哪里有网站推广软件免费推广seo策略方法
  • 阿里云备案网站 网站名称怎么写京icp备案查询