访问者模式

设计模式之访问者模式(Visitor)详解及代码示例

一曲冷凌霜 提交于 2020-04-02 06:06:25
一、访问者模式的定义与特点   访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。 二、访问者模式优缺点   访问者(Visitor)模式是一种对象行为型模式,其主要优点如下: 扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。 灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使得操作集合可相对自由地演化而不影响系统的数据结构。 符合单一职责原则。访问者模式把相关的行为封装在一起,构成一个访问者,使每一个访问者的功能都比较单一。   访问者(Visitor)模式的主要缺点如下: 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。 破坏封装。访问者模式中具体元素对访问者公布细节,这破坏了对象的封装性。 违反了依赖倒置原则。访问者模式依赖了具体类,而没有依赖抽象类。 三、访问者模式的实现   访问者(Visitor)模式实现的关键是如何将作用于元素的操作分离出来封装成独立的类

设计模式——访问者模式

六月ゝ 毕业季﹏ 提交于 2020-03-25 11:41:55
本系列博客是自己在学习设计模式过程中收集整理的文章集合,其他文章参看 设计模式传送门 本文是转载文章,原文请参考 此博客 概念 访问者模式 表示一个作用于某对象结构中的各元素的 操作 ,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。 访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统,又有易于变化的算法。 具体类图 访问者模式的角色: 访问者角色(Visitor):抽象类或者接口,声明访问者可以访问那些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。 具体访问者角色(Concrete Visitor):实现每个访问者角色(Visitor)声明的操作。 元素角色(Element):抽象类或者接口,定义一个Accept操作,声明接收哪一类访问者访问。抽象元素角色一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。 具体元素角色(Concrete Element)

网页设计必须注意的29个问题

大憨熊 提交于 2020-03-20 23:02:23
当你在INTERNET这个信息的海洋中尽情遨游时,会发现许许多多内容丰富、创意新颖、设计独特的个人网页,不知道你见到这样漂亮可人的网页是否有点心动。一旦你具备了上网的条件,又萌发了制作主页的念头,那么就应该注意网页设计时应考虑哪些方面的问题,包括网站功能和以及访问者需要什么。你的整个设计都应该围绕这些方面来进行。下面笔者就自己在实践操作中的使用体会来谈谈网页设计时应该考虑哪些问题,希望能给初建网站的用户带来一定的作用。 1、页面内容要新颖 网页内容的选择要不落俗套,要重点突出一个“新”字,这个原则要求我们在设计网站内容时不能照抄别人的内容,要结合自身的实际情况创作出一个独一无二的网站。 放眼望去,网上的许多个人主页简直就是"杂货店",内容包罗万象,题材千篇一律,人人都是"软件下载",个个都有"网络导航",从头到尾找不出一丝“鲜”意。所以,我们在设计网页时,要把功夫下在选材上。选材要尽量做到“少”而“精”,又必须突出“新”,如能坚持天天更新的话,我相信这样的网页一定会受到大家的欢迎。 2、网页命名要简洁 由于一个网站不可能就是由一个网页组成,它有许多子页面,为了能使这些页面有效地被连接起来,用户最后能给这些页面起一些有代表性的而且简洁易记的网页名称。这样既会有助于你以后方便管理网页,在向搜索引擎提交你的网页时更容易被别人索引到。在给网页命名时

网站流量分析指标-PV/UV/PR/ip分析及区别

我是研究僧i 提交于 2020-03-16 01:48:17
1.什么是pv? PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面。这里需要强调:同一个人浏览你网站同一个页面,不重复计算pv量,点100次也算1次。说白了,pv就是一个访问者打开了你的几个页面。 PV之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。 pv的计算:当一个访问者访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。 2.什么是uv? uv(unique visitor),指访问某个站点或点击某条新闻的不同IP地址的人数。 在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。独立IP访问者提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。 3.什么是PR值? PR值,即PageRank,网页的级别技术。取自Google的创始人Larry Page,它是Google排名运算法则(排名公式)的一部分,用来标识网页的等级/重要性。级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)

设计模式之访问者模式

大兔子大兔子 提交于 2020-03-09 16:52:51
访问者模式 1.简单介绍 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,可以在不改变结构的前提下定义新的操作(作用于这些元素) 访问者模式主要是将数据结构和数据的操作进行分离,解决了 数据结构 和 操作耦合性 的问题 访问者模式的基本工作原理是: 在被访问的类里提供一个对外接待访问者的方法 void accept(Visitor visitor) 2.访问者中的角色 Visitor 抽象访问者,为该对象结构中的ConcreteElement的每一个类声明一个访问操作 ConcreteVisitor 具体的访问者,实现每个有Visitor声明的操作 Element : 定义了一个accept操作,可以接受访问者对象 ConcreteElement : 具体的待访问类,实现accept方法(内部聚合访问者) ObjectStructure 访问元素的集合(多个Element),便于统一规划 3.访问者模式的结构图 4.实现简单的访问者模式代码 import com . liz . GOF23 . visitor . relearn . visitor . Visitor ; //!!!被访问类的接口 //抽象元素(内部有accept方法用于接收访问者) public interface Element { void accept (

17.访问者模式

限于喜欢 提交于 2020-03-03 02:55:44
测评系统的需求 分析上面案例:男人可以对歌手评价成功,失败,或者是待定;同时成功,失败,或者待定可能是男人或女人的测评;可以理解为是一种关联关系; 职 员管理项目的需求 传统方式的问题分析 如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做 引出我们会使用新的设计模式 – 访问者模式 访问者模式 基本介绍 访问者模式(Visitor Pattern ) ,封装一些作用于 某种数据结构 的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 主要将数据结构与数据操作分离,解决 数据结构和 操 作耦 合 性问题 访问者模 式的基本工作原理是 :在 被访问的类 里面加一个对外提 供接待访问者 的接口 访问者模 式 主 要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以 选用访问者模式解决 原理类图 对原理类图的说明-即(访问者模式的角色及职责) Visitor 是抽象访问者,为该对象结构中的 ConcreteElement 的每一个类声明一个 visit 操作 ConcreteVisitor :是一个具体的访问值 实现每个有 Visitor 声明的操作

设计模式(行为型模式)——访问者模式(Visitor)

烂漫一生 提交于 2020-03-02 00:05:19
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。—— From 百科 简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。简单关系图: 来看看原码:一个Visitor类,存放要访问的对象, public interface Visitor { public void visit(Subject sub); } public class MyVisitor implements Visitor { @Override public void visit(Subject sub) { System.out.println("visit the subject:"+sub.getSubject()); } } Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性, public

设计模式(23)--Visitor--访问者模式--行为型

流过昼夜 提交于 2020-02-27 09:13:38
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义:     访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 2.模式特点:     访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。 3.使用场景:     (1)数据结构稳定,作用于数据结构的操作经常变化的时候。     (2)当一个数据结构中,一些元素类需要负责与其不相关的操作的时候,为了将这些操作分离出去,以减少这些元素类的职责时,可以使用访问者模式。     (3)有时在对数据结构上的元素进行操作的时候,需要区分具体的类型,这时使用访问者模式可以针对不同的类型,在访问者类中定义不同的操作,从而去除掉类型判断。     (4)假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去。     (5)假如一组对象中,存在着相似的操作,为了避免出现大量重复的代码,也可以将这些重复的操作封装到访问者中去。     

程序员必备——2020 java进阶学习笔记:java中介者模式(mediator)

可紊 提交于 2020-02-27 05:11:36
简介 访问者模式(VisitorPattern),顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的访问者来完成对已有代码功能的提升,它属于行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 其主要目的是将数据结构与数据操作分离。 访问者模式可以说是设计模式中最难以理解的一个模式,因为相比其它模式而言,它过于”绕“了。但是我们可以通过生活中的一些例子来理解它,比如家里来了客人,客人就是访问者,他可以做一些事情,但是又不能做全部的事情; 又或者说去网吧上网的小明,小明也是访问者,他可以在网吧玩游戏、看视频、听音乐等等,但是不能破坏网吧中的设备等等。按照这么理解,我们大概就可以知道访问者模式主要是做什么了。 访问者模式主要由这五个角色组成,抽象访问者(Visitor)、具体访问者(ConcreteVisitor)、抽象节点(Node)、具体节点(ConcreteNode)和结构对象(ObjectStructure)。 抽象访问者(Visitor)角色:声明了一个或者多个方法操作,形成所有的具体访问者角色必须实现的接口。 具体访问者(ConcreteVisitor)角色:实现抽象访问者所声明的接口,也就是抽象访问者所声明的各个访问操作。 抽象节点(Node)角色:声明一个接受操作

访问者模式

。_饼干妹妹 提交于 2020-02-15 16:13:50
个人博客 http://www.milovetingting.cn 访问者模式 模式介绍 访问者模式是一种将数据操作与数据结构分离的设计模式,它是《设计模式》中23种设计模式最复杂的一个,但它的使用频率不高。 访问者模式的基本思想是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有accept方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的处理。在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个对象都实施accept方法,在每一个元素的accept方法中会调用访问者的visit方法,从而使访问者得以处理对象结构的每一个元素,我们可以针对对象结构设计不同的访问者类来完成不同的操作,达到区别对待的效果。 模式定义 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 使用场景 对象结构比较稳定,但经常需要在此对象结构上定义新的操作。 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作污染这些对象的类,也不希望在增加新操作时修改这些类。 简单使用 定义Staff public abstract class Staff { public String name; public int kpi;