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

个人简历网站开发深圳市设计师服务平台

个人简历网站开发,深圳市设计师服务平台,电商支付网站建设费进什么科目,深圳住建网访客模式 无痕模式 区别本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中#xff0c;您将深入研究大量的设计模式#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查… 访客模式 无痕模式 区别 本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中您将深入研究大量的设计模式并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因并了解何时以及如何应用模式中的每一个。 在这里查看 目录 1.简介 2.什么是访客设计模式 3.实施访客设计模式 4.何时使用访客设计模式 5. JDK中的访问者设计模式 6.下载源代码 1引言 要了解访客设计模式让我们重新访问“ 复合设计模式” 。 组合模式允许您将对象组合成树形结构以表示部分整体层次结构。 在Composite Pattern示例中我们创建了一个由不同类型的对象组成的html结构。 现在假设我们需要在html标签中添加一个css类。 一种方法是在使用setStartTag方法添加开始标记时添加类。 但是这种硬编码设置会给我们的代码造成僵化。 另一种方法是在父抽象HtmlTag类中添加新方法例如addClass 。 所有子类都将重写此方法并将提供css类。 这种方法的一个主要缺点是如果有很多子类将在大型html页面中显示则在所有子类中实施此方法将变得非常昂贵且忙碌。 并假设稍后我们需要在标签中添加另一个样式元素我们再次需要执行相同的操作。 访客设计模式为您提供了一种在不更改元素类的情况下在对象上添加新操作的方法尤其是当操作经常更改时。 2.什么是访客设计模式 访客设计模式的目的是表示要对对象结构的元素执行的操作。 访问者可让您定义新操作而无需更改其所操作元素的类。 当跨类层次结构的对象的异构集合设计操作时Visitor模式很有用。 Visitor模式允许在不更改集合中任何对象的类的情况下定义操作。 为此Visitor模式建议在一个单独的类中定义该操作该类称为“访问者”类。 这将操作与其所操作的对象集合分开。 对于每个要定义的新操作都会创建一个新的访问者类。 由于该操作将在一组对象上执行因此访客需要一种访问这些对象的公共成员的方法。 可以通过实施以下两个设计思想来满足此要求。 图1 –访客设计模式类图 游客 为对象结构中的每个ConcreteElement类声明一个Visit操作。 操作的名称和签名标识了将Visit请求发送给visitor 。 这样访问者就可以确定要访问的元素的具体类别。 然后访问者可以直接通过其特定界面访问该元素。 具体访客 实现Visitor声明的每个操作。 每个操作都会实现为结构中相应对象类别定义的算法的一部分。 ConcreteVisitor提供算法的上下文并存储其本地状态。 这种状态通常会在遍历结构期间累积结果。 元件 定义将visitor作为参数的Accept操作。 ConcreteElement 实现将visitor作为参数的Accept操作。 对象结构 可以枚举其元素。 可以提供一个高级界面以允许visitor访问其元素。 可以是组合也可以是集合例如列表或集合。 3.实施访客设计模式 为了实现Visitor Design Pattern我们将使用相同的Composite Pattern代码 并将为其引入一些新的接口类和方法。 实现Visitor模式需要两个重要的接口一个Element接口它将包含一个参数为Visitor类型的accept方法。 该接口将由所有需要允许访问者访问的类来实现。 在我们的例子中 HtmlTag将实现Element接口因为HtmlTag是所有具体html类的父抽象类因此具体类将继承并覆盖Element接口的accept方法。 另一个重要的界面是Visitor界面 此接口将包含带有实现Element接口的类的参数的visit方法。 还请注意与Composite Design Pattern课程中显示的示例相反我们在HtmlTag类中添加了两个新方法getStartTag和getEndTag 。 package com.javacodegeeks.patterns.visitorpattern;public interface Element {public void accept(Visitor visitor); }package com.javacodegeeks.patterns.visitorpattern;public interface Visitor {public void visit(HtmlElement element);public void visit(HtmlParentElement parentElement); } 下面的代码来自Composite Pattern示例进行了一些更改。 package com.javacodegeeks.patterns.visitorpattern;import java.util.List;public abstract class HtmlTag implements Element{public abstract String getTagName();public abstract void setStartTag(String tag);public abstract String getStartTag();public abstract String getEndTag();public abstract void setEndTag(String tag);public void setTagBody(String tagBody){throw new UnsupportedOperationException(Current operation is not support for this object);}public void addChildTag(HtmlTag htmlTag){throw new UnsupportedOperationException(Current operation is not support for this object);}public void removeChildTag(HtmlTag htmlTag){throw new UnsupportedOperationException(Current operation is not support for this object);}public ListHtmlTaggetChildren(){throw new UnsupportedOperationException(Current operation is not support for this object);}public abstract void generateHtml();} 抽象的HtmlTag类实现Element接口。 下面的具体类将覆盖Element接口的accept方法并调用visit方法并将this运算符作为参数传递。 这将允许visitor方法获取该对象的所有公共成员并对其添加新的操作。 package com.javacodegeeks.patterns.visitorpattern;import java.util.ArrayList; import java.util.List;public class HtmlParentElement extends HtmlTag {private String tagName;private String startTag; private String endTag;private ListHtmlTagchildrenTag;public HtmlParentElement(String tagName){this.tagName tagName;this.startTag ;this.endTag ;this.childrenTag new ArrayList();}Overridepublic String getTagName() {return tagName;}Overridepublic void setStartTag(String tag) {this.startTag tag;}Overridepublic void setEndTag(String tag) {this.endTag tag;}Overridepublic String getStartTag() {return startTag;}Overridepublic String getEndTag() {return endTag;}Overridepublic void addChildTag(HtmlTag htmlTag){childrenTag.add(htmlTag);}Overridepublic void removeChildTag(HtmlTag htmlTag){childrenTag.remove(htmlTag);}Overridepublic ListHtmlTaggetChildren(){return childrenTag;}Overridepublic void generateHtml() {System.out.println(startTag);for(HtmlTag tag : childrenTag){tag.generateHtml();}System.out.println(endTag);}Overridepublic void accept(Visitor visitor) {visitor.visit(this);}}package com.javacodegeeks.patterns.visitorpattern;public class HtmlElement extends HtmlTag{private String tagName;private String startTag; private String endTag;private String tagBody;public HtmlElement(String tagName){this.tagName tagName;this.tagBody ;this.startTag ;this.endTag ;}Overridepublic String getTagName() {return tagName;}Overridepublic void setStartTag(String tag) {this.startTag tag;}Overridepublic void setEndTag(String tag) {this.endTag tag;}Overridepublic String getStartTag() {return startTag;}Overridepublic String getEndTag() {return endTag;}Overridepublic void setTagBody(String tagBody){this.tagBody tagBody;}Overridepublic void generateHtml() {System.out.println(startTagtagBodyendTag);}Overridepublic void accept(Visitor visitor) {visitor.visit(this);}} 现在具体的访问者类我们已经创建了两个具体的类一个将为所有html标记添加一个css类visitor 另一个将使用html标记的style属性更改标记的宽度。 package com.javacodegeeks.patterns.visitorpattern;public class CssClassVisitor implements Visitor{Overridepublic void visit(HtmlElement element) {element.setStartTag(element.getStartTag().replace(, classvisitor));}Overridepublic void visit(HtmlParentElement parentElement) {parentElement.setStartTag(parentElement.getStartTag().replace(, classvisitor));}}package com.javacodegeeks.patterns.visitorpattern;public class StyleVisitor implements Visitor {Overridepublic void visit(HtmlElement element) {element.setStartTag(element.getStartTag().replace(, stylewidth:46px;));}Overridepublic void visit(HtmlParentElement parentElement) {parentElement.setStartTag(parentElement.getStartTag().replace(, stylewidth:58px;));}} 现在让我们测试上面的示例。 package com.javacodegeeks.patterns.visitorpattern;public class TestVisitorPattern {public static void main(String[] args) {System.out.println(Before visitor......... \\n);HtmlTag parentTag new HtmlParentElement(html);parentTag.setStartTag(html);parentTag.setEndTag(/html);HtmlTag p1 new HtmlParentElement(body);p1.setStartTag(body);p1.setEndTag(/body);parentTag.addChildTag(p1);HtmlTag child1 new HtmlElement(p);child1.setStartTag(p);child1.setEndTag(/p);child1.setTagBody(Testing html tag library);p1.addChildTag(child1);child1 new HtmlElement(p);child1.setStartTag(p);child1.setEndTag(/p);child1.setTagBody(Paragraph 2);p1.addChildTag(child1);parentTag.generateHtml();System.out.println(\\nAfter visitor....... \\n);Visitor cssClass new CssClassVisitor();Visitor style new StyleVisitor();parentTag new HtmlParentElement(html);parentTag.setStartTag(html);parentTag.setEndTag(/html);parentTag.accept(style);parentTag.accept(cssClass);p1 new HtmlParentElement(body);p1.setStartTag(body);p1.setEndTag(/body);p1.accept(style);p1.accept(cssClass);parentTag.addChildTag(p1);child1 new HtmlElement(p);child1.setStartTag(p);child1.setEndTag(/p);child1.setTagBody(Testing html tag library);child1.accept(style);child1.accept(cssClass);p1.addChildTag(child1);child1 new HtmlElement(p);child1.setStartTag(p);child1.setEndTag(/p);child1.setTagBody(Paragraph 2);child1.accept(style);child1.accept(cssClass);p1.addChildTag(child1);parentTag.generateHtml();}} 上面的代码将导致以下输出 Before visitor......... html body pTesting html tag library/p pParagraph 2/p /body /htmlAfter visitor....... html stylewidth:58px; classvisitor body stylewidth:58px; classvisitor p stylewidth:46px; classvisitorTesting html tag library/p p stylewidth:46px; classvisitorParagraph 2/p /body /html “访问者之前……”之后的输出与“复合模式”课程中的输出相同。 后来我们创建了两个具体的访问者然后使用accept方法将它们添加到具体的html对象中。 输出“ After visitor…”显示给您结果将css类和样式元素添加到html标记中。 请注意Visitor Pattern的优点是我们可以在不更改其类的情况下向对象添加新操作。 例如我们可以添加一些JavaScript函数例如onclick或一些angularjs ng标签而无需修改类。 4.何时使用访客设计模式 在以下情况下使用“访问者”模式 对象结构包含许多具有不同接口的对象类并且您希望根据这些对象的具体类对这些对象执行操作。 需要对对象结构中的对象执行许多不同且不相关的操作并且您要避免使用这些操作“污染”它们的类。 访客可以通过在一个类中定义相关操作来将它们保持在一起。 当许多应用程序共享对象结构时请使用Visitor将操作仅放在需要它们的那些应用程序中。 定义对象结构的类很少更改但是您经常想在该结构上定义新的操作。 更改对象结构类需要重新定义所有访问者的接口这可能会导致成本高昂。 如果对象结构类经常更改那么最好在这些类中定义操作。 5. JDK中的访问者设计模式 javax.lang.model.element.Element和javax.lang.model.element.ElementVisitor javax.lang.model.type.TypeMirror和javax.lang.model.type.TypeVisitor 6.下载源代码 这是“访客设计模式”的一课。 您可以在此处下载相关的源代码 VisitorPattern-Project 翻译自: https://www.javacodegeeks.com/2015/09/visitor-design-pattern.html访客模式 无痕模式 区别
http://www.zqtcl.cn/news/446273/

相关文章:

  • 做网站买那种服务器wordpress商店插件
  • dw网站开发流程做影视网站怎么
  • 建好的网站在哪里免费的app软件大全
  • 建设银行信用卡境外网站盗刷电子商务专业是学什么的
  • asp.net做电商网站设计徐州做网站费用
  • 网站怎么发布做微商wordpress 主页显示多图
  • 国外做宠物用品的网站安徽网新科技有限公司官网
  • 辣条类网站建设规划书南阳网站推广优化公司
  • 帝国网站做地域标签seo关键词排名查询
  • 西安网站建设xs029免费代理ip最新
  • 网站建设不挣钱海盐建设局网站
  • 潍坊做网站张家口最近一个月的热点事件
  • 套模板的网站多少钱公司付的网站费怎么做分录
  • 做ps找图的网站有哪些响应式设计是什么意思
  • 家教网站建设的推广猪八戒网站做私活赚钱吗
  • 男女做那种的视频网站asp.net做网站怎么样
  • 给企业做网站怎么收钱郑州网站顾问
  • readme.md做网站设计网页的快捷网站
  • 做双语网站用什么cms系统好百度后台管理
  • 什么网站可以做试卷企业的oa管理系统
  • 经典网站模板自己做pc网站建设
  • 网站有源码之后怎么建设网站河北加工活外发加工网
  • 什么网站可以做自媒体外包小程序
  • 建网站_网站内容怎么做网络营销的广告形式
  • 静态网站怎么做留言板关键词有哪些
  • 开发软件自学步骤朝阳seo推广
  • Wordpress有用么网络推广seo怎么做
  • 企业做网站的注意事项深圳市建网站
  • 代做网站关键词怎么自创网页
  • 网站建设资金申请报告深圳物流公司收费标准