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

东莞有哪些做网站建设飞鹰摩托车官方网站

东莞有哪些做网站,建设飞鹰摩托车官方网站,网站服务体系,百度搜索推广方案访问者模式是一种较为复杂的行为型设计模式#xff0c;它包含访问者和被访问元素两个主要组成部分#xff0c;这些被访问的元素通常具有不同的类型#xff0c;且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素#xff0c;而划价人…   访问者模式是一种较为复杂的行为型设计模式它包含访问者和被访问元素两个主要组成部分这些被访问的元素通常具有不同的类型且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能为这些不同类型的元素增加新的操作。       在使用访问者模式时被访问元素通常不是单独存在的它们存储在一个集合中这个集合被称为“对象结构”访问者通过遍历对象结构实现对其中存储的元素的逐个操作。       访问者模式定义如下 访问者模式(Visitor Pattern):提供一个作用于某对象结构中的各元素的操作表示它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。       访问者模式的结构较为复杂其结构如图26-2所示             在访问者模式结构图中包含如下几个角色       ●Vistor抽象访问者抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型具体访问者需要实现这些操作方法定义对这些元素的访问操作。       ●ConcreteVisitor具体访问者具体访问者实现了每个由抽象访问者声明的操作每一个操作用于访问对象结构中一种类型的元素。       ●Element抽象元素抽象元素一般是抽象类或者接口它定义一个accept()方法该方法通常以一个抽象访问者作为参数。【稍后将介绍为什么要这样设计。】       ●ConcreteElement具体元素具体元素实现了accept()方法在accept()方法中调用访问者的访问方法以便完成对一个元素的操作。       ● ObjectStructure对象结构对象结构是一个元素的集合它用于存放元素对象并且提供了遍历其内部元素的方法。它可以结合组合模式来实现也可以是一个简单的集合对象如一个List对象或一个Set对象。       访问者模式中对象结构存储了不同类型的元素对象以供不同访问者访问。访问者模式包括两个层次结构一个是访问者层次结构提供了抽象访问者和具体访问者一个是元素层次结构提供了抽象元素和具体元素。相同的访问者可以以不同的方式访问不同的元素相同的元素可以接受不同访问者以不同访问方式访问。在访问者模式中增加新的访问者无须修改原有系统系统具有较好的可扩展性。       在访问者模式中抽象访问者定义了访问元素对象的方法通常为每一种类型的元素对象都提供一个访问方法而具体访问者可以实现这些访问方法。这些访问方法的命名一般有两种方式一种是直接在方法名中标明待访问元素对象的具体类型如visitElementA(ElementA elementA)还有一种是统一取名为visit()通过参数类型的不同来定义一系列重载的visit()方法。当然如果所有的访问者对某一类型的元素的访问操作都相同则可以将操作代码移到抽象访问者类中其典型代码如下所示 [java] view plain copy abstract class Visitor  {      public abstract void visit(ConcreteElementA elementA);      public abstract void visit(ConcreteElementB elementB);      public void visit(ConcreteElementC elementC)      {          //元素ConcreteElementC操作代码      }  }         在这里使用了重载visit()方法的方式来定义多个方法用于操作不同类型的元素对象。在抽象访问者Visitor类的子类ConcreteVisitor中实现了抽象的访问方法用于定义对不同类型元素对象的操作具体访问者类典型代码如下所示 [java] view plain copy class ConcreteVisitor extends Visitor  {      public void visit(ConcreteElementA elementA)      {          //元素ConcreteElementA操作代码      }      public void visit(ConcreteElementB elementB)      {          //元素ConcreteElementB操作代码      }  }         对于元素类而言在其中一般都定义了一个accept()方法用于接受访问者的访问典型的抽象元素类代码如下所示 [java] view plain copy interface Element  {      public void accept(Visitor visitor);  }         需要注意的是该方法传入了一个抽象访问者Visitor类型的参数即针对抽象访问者进行编程而不是具体访问者在程序运行时再确定具体访问者的类型并调用具体访问者对象的visit()方法实现对元素对象的操作。在抽象元素类Element的子类中实现了accept()方法用于接受访问者的访问在具体元素类中还可以定义不同类型的元素所特有的业务方法其典型代码如下所示 [java] view plain copy class ConcreteElementA implements Element  {      public void accept(Visitor visitor)      {          visitor.visit(this);      }            public void operationA()      {          //业务方法      }  }         在具体元素类ConcreteElementA的accept()方法中通过调用Visitor类的visit()方法实现对元素的访问并以当前对象作为visit()方法的参数。其具体执行过程如下       (1) 调用具体元素类的accept(Visitor visitor)方法并将Visitor子类对象作为其参数       (2) 在具体元素类accept(Visitor visitor)方法内部调用传入的Visitor对象的visit()方法如visit(ConcreteElementA elementA)将当前具体元素类对象(this)作为参数如visitor.visit(this)       (3) 执行Visitor对象的visit()方法在其中还可以调用具体元素对象的业务方法。       这种调用机制也称为“双重分派”正因为使用了双重分派机制使得增加新的访问者无须修改现有类库代码只需将新的访问者对象作为参数传入具体元素对象的accept()方法程序运行时将回调在新增Visitor类中定义的visit()方法从而增加新的元素访问方式。   思考 双重分派机制如何用代码实现         在访问者模式中对象结构是一个集合它用于存储元素对象并接受访问者的访问其典型代码如下所示 [java] view plain copy class ObjectStructure  {      private ArrayListElement list  new ArrayListElement(); //定义一个集合用于存储元素对象        public void accept(Visitor visitor)      {          Iterator ilist.iterator();                    while(i.hasNext())          {              ((Element)i.next()).accept(visitor); //遍历访问集合中的每一个元素          }      }        public void addElement(Element element)      {          list.add(element);      }        public void removeElement(Element element)      {          list.remove(element);      }  }         在对象结构中可以使用迭代器对存储在集合中的元素对象进行遍历并逐个调用每一个对象的accept()方法实现对元素对象的访问操作。   思考 访问者模式是否符合“开闭原则”【从增加新的访问者和增加新的元素两方面考虑。】 转载于:https://www.cnblogs.com/snowbook/p/5207835.html
http://www.yutouwan.com/news/22503/

相关文章:

  • 小程序做视频网站网站建设基本代码
  • 网站在百度上搜索不到网站的备案要求吗
  • 建设个人购物网站网页制作二维码
  • app营销网站模板网站建设的步骤和要点
  • 开平市网站建设个人注册商标步骤
  • 引擎搜索网站模板巨量关键词搜索查询
  • 网站建设公司的介绍义乌外贸网站建设公司
  • 外贸网站设计师响应式的网站做优化好吗
  • 西安三桥网站建设长春网站排名
  • 杭州市网站seo女生做网站主题有哪些
  • 做网站好的公司西安网站建设推广优化
  • 亚马逊网站建设目的温州建网站业务人员
  • 手机网站建设软件有哪些内容wordpress mu 2017
  • 开发网站开发工程师招聘要求龙岗网红基地
  • 门户网站建设推荐新乡搜索引擎优化
  • 南昌网站建设工作长春seo外包平台
  • 360任意看地图网站网易云音乐网站建设项目规划书
  • 北京建设部网站职称网站分页符素材
  • 花木企业网站源码wordpress中药材主题
  • 高品质网站开发国外的智慧城市建设网站
  • 目前做网站流行的是什么淮安市住房和城乡建设局网站首页
  • 网站搜索查询友博国际个人中心登录
  • 网站超市源码哪个好遵义市做网站的电话
  • 小学学校网站建设情况资料多个域名解析到一个网站
  • 用vs2013做网站登录西安市发布最新消息
  • 公司网站建设管理WordPress企业 破解主题
  • 可以做填字游戏的网站微营销的优势
  • html5单页面网站wordpress 主题 排行
  • 有电脑网站怎样建手机织梦cms做网站
  • 退役军人事务部网站建设国外的有趣设计网站