首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Python设计模式(11):访问者模式

访问者模式是指作用于一个对象结构体上的元素的操作。访问者可以使用户在不改变该结构体中的类的基础上定义一个新的操作。 访问者模式的类图如图所示。 ?...可以有多种具体的访问者类,各自完成特定的目的,如一个访问者类是计算价格,另一个访问者类则是计算存货数量。因此需要定义一个抽象的访问者父类 Visitor 以及用于各种特殊目的具体的子类。...反之,如果 Element 的子类经常改变结构,例如需要增加一个新的税种,这就需要在访问者类中增加新的访问方法,因此,在这种情况下使用访问者模式代价较高,尽量不要使用访问者模式。...访问者模式的优点如下。 使得在访问者类中针对复杂类结构中的某个类添加新方法较为容易,即只需要简单地添加一个新的访问者方法即可。如果不采用访问者模式,这需要在每个类中添加一个新的方法。...访问者将相关的方法集中在一个具体的访问者类中,而其他相关的方法集中在另外一个具体的访问者类中。也就是说,访问者子类是按照方法的类型来分类的。

73710

访问者模式

访问者模式 访问者模式Visitor Pattern中属于行为型模式,针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法,元素的执行算法可以随着访问者改变而改变,主要意图在于将数据结构与数据操作分离...优点 符合单一职责原则,凡是适用访问者模式的场景中,元素类中需要封装在访问者中的操作必定是与元素类本身关系不大且是易变的操作,使用访问者模式一方面符合单一职责原则,另一方面,因为被封装的操作通常来说都是易变的...扩展性良好,元素类可以通过接受不同的访问者来实现对不同操作的扩展。 缺点 具体元素对访问者公布细节,违反了迪米特原则。 具体元素变更比较困难。 违反了依赖倒置原则,依赖了具体类,没有依赖抽象。...适用环境 假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去。...假如一组对象中,存在着相似的操作,为了避免出现大量重复的代码,也可以将这些重复的操作封装到访问者中去。 实现 // 以动物园模拟为例,我们有几种不同种类的动物,它们能够发出不同的声音。

49100

访问者模式

访问者模式主要由:Visitor(访问者角色)、Concrete Visitor(具体访问者角色)、Element(元素角色)、Concrete Element(具体元素角色)、Object Structure...访问者角色(Visitor): 为该对象结构中具体元素角色声明一个访问操作接口. 具体访问者角色(Concrete Visitor): 实现每个由访问者角色(Visitor)声明的操作....访问者模式的特点及适用场合 访问者模式具有以下的几个特点: 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。 访问者模式适用于数据结构相对稳定算法又易变化的系统。...因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。 访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。...访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。 适用场合 在以下情况中我们会考虑使用访问者模式: 1.

83750

访问者模式

概要 访问者模式是一种将数据结构与数据操作分离的设计模式。它允许你定义新的操作,而无需改变所操作的元素类。该模式的核心思想是,通过一个访问者类,可以访问不同类的元素,而不用关心这些元素的具体类。...实现方式: 定义访问者接口:包含多个访问方法,每个方法对应一个具体元素的访问操作。 具体元素类:实现元素接口,提供接受访问者的方法,通常是accept(Visitor visitor)方法。...具体访问者类:实现访问者接口,实现对各种具体元素的访问操作。 结构对象:包含多个元素,通常提供一个方法接受访问者,遍历所有元素并调用访问者的方法。...适用场景: 当一个对象结构包含很多类,而你希望对这些类实施一些依赖其具体类的操作时,使用访问者模式。 当需要对一个对象结构中的对象进行很多不同并且不相关的操作时,使用访问者模式。...元素类与操作分离:访问者模式将数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化。 缺点: 具体元素对访问者公开:访问者模式使得具体元素对访问者公开,暴露了元素的细节,破坏了封装性。

11020

访问者模式

让自己的内心藏着一条巨龙,既是一种苦刑,也是一种乐趣——雨果 今天跟着一个网站学了学访问者模式 简单来说,如果我们要在不改动现有逻辑的情况下对类进行增强,则可以使用访问者模式 真实世界类比...since 2021/7/18 15:58 */ void arrived(); /** * 访问、拜访建筑 * * @param person 访问者...3.访问者对象可以在与各种对象交互时收集一些有用的信息。 当你想要遍历一些复杂的对象结构 (例如对象树), 并在结构中的每个对象上应用访问者时, 这些信息可能会有所帮助。...缺点: 1.每次在元素层次结构中添加或移除一个类时, 你都要更新所有的访问者。...(建了个奶茶店,你得在Person、保险推销员和外卖员中都新增这个建筑) 2.在访问者同某个元素进行交互时, 它们可能没有访问元素私有成员变量和方法的必要权限。

29810

访问者模式

这是23种设计模式的最后一个——访问者模式,这个模式确实不怎么好理解,不怎么好用,而且实际中也很少用到这个设计模式。...《大话设计模式》中就提到GoF四个人中有一个说过:“大多数时候你并不需要访问者模式,但当一旦你需要访问者模式时,那就是真的需要它了。”...这时,男人和女人就是相对稳定的系统,我们将男人和女人对待事物看法不同用程序代码并且用访问者模式来表达。...,在此种场景中只有男人和女人,所以这个分类相对来说是稳定的我们才能使用访问者模式。...,访问者模式确实是现实场景不常用的模式,只有用在相对稳定的分类才能尝试使用访问者模式,千万不要生搬硬套设计模式,这样只会得不偿失。

68550

访问者模式

一、简介 1、访问者模式表示一个作用于某对象结构中各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。...2、模式中的成员角色 访问者(Visitor)   :访问者抽象接口,通过visit(Element)方法访问Element(数据结构),完成对Element的操作行为。...具体访问者(ConcreteVisitor):访问者的具体实现类。 元素(Element),也就是被访问者,通过accept(Visitor)方法接受Visitor的访问。...ObjectStructure本身也可以作为被访问者。 3、UML ? 4、所属类别:行为型 二、C++程序 1 // 访问者模式.cpp : 定义控制台应用程序的入口点。...(Person *)=0; 15 //virtual void print_judgement(Person *)=0; 16 17 //被访问者抽象类 18 class Person

56050

访问者模式

访问者模式 基本概念 访问者模式(Visitor Pattern):封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 主要将数据结构和数据操作分离...,解决数据结构和操作耦合性的问题 访问者模式基本的工作原理是:在被访问的类里面加一个对外提供接待访问的接口 访问者模式主要应用场景:需要对一个对象结构中的对象进行很多种不同的操作(这些操作彼此没有关联)...访问者模式的原理类图 类图分析 Visitor 是抽象访问者,为该对象结构中的ConcreteElement的每一个类声明一个visit操作 ConcreteVisitor :是一个具体的访问者 实现每个有...简单总结一下吧: 优点: 访问者模式符合单一职责原则、让程序具有优秀的扩展性、灵活性非常高 访问者模式可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统 缺点: 具体元素对访问者公布细节...访问者依赖的是具体元素,而不是抽象元素 因此,如果一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就是比较合适的 ----

9510

访问者模式(Visitor)

解决方案 访问者模式建议将新行为放入一个名为访问者的独立类中,而不是试图将其整合到已有类中。现在,需要执行操作的原始对象将作为参数被传递给访问者中的方法,让方法能访问对象所包含的一切必要数据。...由于该对象知晓其自身的类,因此能更自然地在访问者中选出正确的方法。它们会“接收”一个访问者并告诉其应执行的访问者方法。...现在,如果我们抽取出所有访问者的通用接口,所有已有的节点都能与我们在程序中引入的任何访问者交互。如果需要引入与节点相关的某个行为,你只需要实现一个新的访问者类即可。...该方法必须接受访问者对象作为参数。 在所有具体元素类中实现接收方法。这些方法必须将调用重定向到当前元素对应的访问者对象中的访问者方法上。 元素类只能通过访问者接口与访问者进行交互。...不过访问者必须知晓所有的具体元素类,因为这些类在访问者方法中都被作为参数类型引用。 为每个无法在元素层次结构中实现的行为创建一个具体访问者类并实现所有的访问者方法。

31410

访问者模式浅析

本文今天要讲访问者模式,就是可以使你在不改变各元素的累的前提下,定义作用于这些元素的新操作,从而可以满足不同的访问者访问的场景。 一....结构 访问者模式的基本结构如下: ?...这里涉及到的参与者有如下几种: Visitor(访问者) 声明一个或者多个访问操作 ConcreteVistor(具体的访问者) 实现Visitor声明的所有接口,也就是访问者所声明的各个访问操作。...,JSON访问者看到json格式的打印;XML访问者则看到xml格式的打印。...而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此,变得很容易。 (2):访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。

33730

访问者模式(Visitor)

访问者模式(Visitor) 访问者模式(Visitor) 意图:表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下定义作用于这些元素的新操作。...当需要为对象扩展功能时,只需要再添加一个访问者,重定义对每类对象进行访问的方式就可以了。...再在节点对象内部使用统一接口accept调用对应的算法即可,节点内容通过自身的对象指针传递给访问者对象。...用户只要按需创建合适的访问者类实现之,然后遍历集合对象,直接“访问”就可以了。...额外需要说明的一点是,访问者并不一定让具体元素类继承于统一的父类,从访问者抽象类也能看出,抽象类接口仅仅依赖于具体实现的类。

1K70

访问者模式解读

访问者模式基本介绍 基本介绍 1) 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。...2) 主要将数据结构与数据操作分离,解决 数据结构和操作耦合性问题 3) 访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口 4) 访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操作...(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以选用访问者模式解决 访问者模式的原理类图 对原理类图的说明  1) Visitor 是抽象访问者,为该对象结构中的 ConcreteElement...、灵活性非常高 2) 访问者模式可以对功能进行统一,可以做报表、UI、拦截器与过滤器,适用于数据结构相对稳定的系统 缺点 1) 具体元素对访问者公布细节,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的...访问者依赖的是具体元素,而不是抽象元素 3) 因此,如果一个系统有比较稳定的数据结构,又有经常变化的功能需求,那么访问者模式就是比较合适的

13630

设计模式---访问者模式

访问者模式 介绍 定义及使用场景 UML类图 角色 财务案例 个人心得体会 静态分派以及动态分派 静态分派 动态分派 访问者模式中的伪动态双分派 对访问者模式的一些思考 总结 优点 缺点 适用性 参考文章...---- 介绍 访问者模式,是行为型设计模式之一 访问者模式是一种将数据操作与数据结构分离的设计模式 访问者模式的基本思想: 软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个...,对每一个元素都实施 accept 方法,在每一个元素的 accept 方法中会调用访问者的 visit 方法,从而使访问者得以处理对象结构的每一个元素,我们可以针对对象结构设计不同的访问者类来完成不同的操作...---- 个人心得体会 访问者模式将访问者和被访问对象之间进行了解耦,通过一个访问者的顶层接口和被访问者的顶层接口达到这个目的 ---- 静态分派以及动态分派 变量被声明时的类型叫做变量的静态类型(Static...3、有时在对数据结构上的元素进行操作的时候,需要区分具体的类型,这时使用访问者模式可以针对不同的类型,在访问者类中定义不同的操作,从而去除掉类型判断。 ---- 参考文章 设计模式学习之访问者模式

34720
领券