访问者模式

23种设计模式之访问者模式

只谈情不闲聊 提交于 2019-11-28 04:45:41
访问者模式的定义 定义: 封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 通俗的说, 就是定义一个访问者角色, 当对指定角色进行访问时要通过访问者进行访问 其类图如下: 各角色说明: Vistor 抽象访问者: 抽象类或接口, 声明访问者可以访问哪些元素, 具体到程序中就是 visit 方法的参数定义哪些对象是可以被访问的 ConcreteVistor 具体访问者: 它影响访问者访问到一个类后该怎么干, 要做什么事 Element 抽象元素: 接口或抽象类, 声明接受哪一类访问者访问, 程序上是通过 accept 方法中的参数来定义的 ConcreteElement 具体元素: 实现 accept方法, 通常是 visitor.visit(this); 基本上都形成一种模式了 ObjectStruture 结构对象: 元素的生成者, 一般容纳在多个不同类、不同接口的容器, 项目中一般很少抽象出这个角色 抽象元素代码: 具体元素代码: 抽象访问者代码: 具体访问者代码: 结构对象用来产生不同的元素对象, 代码如下: 场景类代码: 通过增加访问者, 这要是具体元素就非常容易访问, 对元素的遍历就更加容易了, 甭管它是什么对象, 只要它在一个容器中, 都可以通过访问者来访问, 任务集中化. 访问者模式的应用 访问者模式的优点:

访问者模式(Visitor Pattern)

会有一股神秘感。 提交于 2019-11-28 04:45:32
模式定义 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 UML类图 抽象访问者(Vistor) 声明一个或多个访问抽象节点类型的抽象方法(参数为抽象节点类型),依赖抽象节点类型。 具体访问者(ConcreteElement) 实现抽象访问者角色中所有声明的接口。 抽象元素(Element) 声明节点被访问者访问的方法,依赖与访问者。 具体元素(ConcreteElement) 实现抽象元素所规定的接受操作。 对象结构(ObjectStructure) 节点的容器,可以包含多个不同类或接口的容器。 代码结构 public static class VisitorApp { public static void Run() { ObjectStructure o = new ObjectStructure(); o.Attach(new ConcreteElementA()); o.Attach(new ConcreteElementB()); // Create visitor objects ConcreteVisitor1 v1 = new ConcreteVisitor1(); ConcreteVisitor2 v2 = new ConcreteVisitor2(); // Structure accepting

设计模式之访问者模式

北战南征 提交于 2019-11-28 04:45:19
访问者模式 概述 访问者模式 是一种将数据操作与数据结构分离的模式 是23中设计模式中最复杂的一个,使用频率也不是很高,但一旦需要它的时候将变得非常有用. 软件系统中拥有一个由许多对象构成的,比较稳定的对象结构.这些对象的类都拥有一个 accept 方法用来接收访问者对象的访问. 访问者是一个接口,拥有 visit 方法,这个方法对访问到的对象结构中不同类型的元素做出不同的处理. 在对象结构的一次访问过程中,我们遍历整个对象结构,对每个元素都实施 accept 方法,在每个元素的 accept 方法中会调用访问者的 visit 方法,使得访问者得以处理对象结构的每一个元素. 定义 封装一些作用于某种数据结构中的各个元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作. UML Visitor : 接口或抽象类,它定义了对每一个元素( Element )访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素个数是一样的,因此,访问者模式要求元素的了类族要稳定. ConcreteVisitor : 具体的访问者,它需要给出对每一个元素类访问时所产生的具体行为 Element : 元素接口或者抽象类,它定义了一个接受访问者( accept )的方法,其意义是指每一个元素都要可以被访问者访问. ElementAA,ElementB : 具体的元素类

14.访问者模式

不打扰是莪最后的温柔 提交于 2019-11-28 04:44:51
访问者模式 一、应用实例 将观众分为男和女,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(成功、失败等) 二、访问者模式 1.基本介绍 1)封装一些作用于某种数据结构的各元素操作,在不改变数据结构的前提下定义作用于这些元素的新的操作。 2)将数据结构与数据操作分离,解决 数据结构和操作耦合性问题 3)基本工作原理:在被访问的类里面增加一个对外提供接待访问者的接口 2.原理类图 1)Visitor是抽象访问者,为该对象结构中的ConcreteElement的每一个类声明一个visit操作 2)ConcreteVisitor:是一个具体的访问者实现每个有Visitor声明的操作,是每个操作实现的部分. 3)ObjectStructure 能枚举它的元素,可以提供一个高层的接口,用来允许访问者访问元素 4)Element 定义一个accept方法,接收一个访问者对象 5)ConcreteElement 为具体元素,实现了accept 方法 三、访问者应用实例 1.思路分析 2.代码实现 /** * 抽象访问者 */ public abstract class Action { //得到男性 的测评 public abstract void getManResult(Man man); //得到女的 测评 public abstract void

设计模式之——访问者模式

旧街凉风 提交于 2019-11-27 03:15:52
element.h # ifndef ELEMENT_H # define ELEMENT_H # include "visitor.h" class Element { public : Element ( ) { } virtual void accept ( Visitor * visitor ) = 0 ; } ; class ConcreteElementA : public Element { public : ConcreteElementA ( ) { } void accept ( Visitor * visitor ) { visitor -> visitConcreteElementA ( this ) ; } } ; class ConcreteElementB : public Element { public : ConcreteElementB ( ) { } void accept ( Visitor * visitor ) { visitor -> visitConcreteElementB ( this ) ; } } ; # endif // ELEMENT_H visitor.h # ifndef VISITOR_H # define VISITOR_H # include <QtDebug> # include "element.h"

14.访问者模式

我的未来我决定 提交于 2019-11-26 22:07:47
访问者模式 一、应用实例 将观众分为男和女,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(成功、失败等) 二、访问者模式 1.基本介绍 1)封装一些作用于某种数据结构的各元素操作,在不改变数据结构的前提下定义作用于这些元素的新的操作。 2)将数据结构与数据操作分离,解决 数据结构和操作耦合性问题 3)基本工作原理:在被访问的类里面增加一个对外提供接待访问者的接口 2.原理类图 1)Visitor是抽象访问者,为该对象结构中的ConcreteElement的每一个类声明一个visit操作 2)ConcreteVisitor:是一个具体的访问者实现每个有Visitor声明的操作,是每个操作实现的部分. 3)ObjectStructure 能枚举它的元素,可以提供一个高层的接口,用来允许访问者访问元素 4)Element 定义一个accept方法,接收一个访问者对象 5)ConcreteElement 为具体元素,实现了accept 方法 三、访问者应用实例 1.思路分析 2.代码实现 /** * 抽象访问者 */ public abstract class Action { //得到男性 的测评 public abstract void getManResult(Man man); //得到女的 测评 public abstract void