设计模式之访问者模式-访问一下呗!

2024-04-14 17:38

本文主要是介绍设计模式之访问者模式-访问一下呗!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

访问者模式

    • 一、访问者模式的概念
    • 二、访问者模式使用场景
    • 三、访问者模式构建方法
      • 1、抽象访问者类(Visitor)
      • 2、具体访问者类(ConcreteVisitor)
      • 3、抽象节点类(Element)
      • 4、具体节点类(ConcreteElement)
      • 5、结构对象类(ObiectStructure)
    • 四、访问者模式的示例
    • 五、访问者模式的优缺点
      • 优点:
      • 缺点:

一、访问者模式的概念

访问者模式属于行为模式,它分离对象的数据和行为,使用访问者模式,可以在不修改已有类的情况下,增加新的操作角色和职责。

二、访问者模式使用场景

1、当对象结构中的对象对应的类很少改变,但经常需要在此对象结构上定义新的行为和操作方法。
2、当需要对对象结构新增加的行为和操作,避免新的操作和行为改变原来的对象类,可以使用该模式实现解耦合。

三、访问者模式构建方法

1、抽象访问者类(Visitor)

访问者的对象抽象类,定义具体访问者的共同接口和方法。

2、具体访问者类(ConcreteVisitor)

具体访问者类实现抽象访问者类所声明的接口和方法。

3、抽象节点类(Element)

抽象节点类声明一个接受接口和方法,接受一个访问者对象作为一个参量。

4、具体节点类(ConcreteElement)

具体节点类实现了抽象节点类所定义的的接受接口和方法。

5、结构对象类(ObiectStructure)

结构对象类可以遍历结构中的所有元素,可以提供一个高层次的接口,让访问者对象可以访问每一个元素。

四、访问者模式的示例

// VisitorPattern.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <string>
#include <list>#define DELETE_PTR(p) {if(p!=nullptr){delete (p); (p)=nullptr;}}
using namespace std;// 前置声明
class StaffElement;// 访问者抽象类-客户
class CustomerVisit
{
public:virtual void customVisit(StaffElement *pStaffElement) = 0;
};// 抽象节点类-营业厅员工
class StaffElement
{
public:virtual void accepCustomer(CustomerVisit 

这篇关于设计模式之访问者模式-访问一下呗!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903593

相关文章

如何开启和关闭3GB模式

https://jingyan.baidu.com/article/4d58d5414dfc2f9dd4e9c082.html

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目,可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件             将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: 'localhost' //将localhost进行替换成 0.0.0.0host:

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Builder模式的实现

概念 在创建复杂对象时,将创建该对象的工作交给一个建造者,这个建造者就是一个Builder。在日常的开发中,常常看到,如下这些代码: AlertDialog的实现 AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setMessage("你好建造者");builder.setTitle

C# 命名管道中客户端访问服务器时,出现“对路径的访问被拒绝”

先还原一下我出现错误的情景:我用C#控制台写了一个命名管道服务器,然后用ASP.NET写了一个客户端访问服务器,运行之后出现了下面的错误: 原因:服务器端的访问权限不够,所以是服务器端的问题,需要增加访问权限。(网上很多都说是文件夹的权限不够,情况不同,不适用于我这种情况) 解决办法: (1)在服务器端相应地方添加以下代码。 PipeSecurity pse = new PipeSec