《访问者模式(极简c++)》

这篇具有很好参考价值的文章主要介绍了《访问者模式(极简c++)》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客

模式说明
  • 方案:将数据结构与数据操作分离,使得数据结构可以在不改变的情况下,添加新的操作。
  • 优点:增加新的操作易于扩展,符合开闭原则;将相关行为封装在一起,使得代码易于维护。
  • 缺点:增加新的数据结构需要修改所有的访问者类,可能引入依赖倒置问题。
本质思想数据类型A基本不变。但是对应的具体操作O会变化,把这些操作O抽象成一个类B。在类A要操作O的时候,传入类B,以触发动作
实践建议:并不常用。对大部分情况下,直接修改类中的操作接口就行,如果有类似操作,一般直接抽象一个操作类,和现有类组合就行。这样代码逻辑也会更易读
#include <iostream>

// Forward declaration of concrete bird classes
class Sparrow;
class Pigeon;

// Abstract base class for visitor
class BirdVisitor {
public:
    virtual void visit(Sparrow& sparrow) = 0;
    virtual void visit(Pigeon& pigeon) = 0;
};

// Concrete bird class: Sparrow
class Sparrow {
public:
    void accept(BirdVisitor& visitor) {
        visitor.visit(*this);
    }
};

// Concrete bird class: Pigeon
class Pigeon {
public:
    void accept(BirdVisitor& visitor) {
        visitor.visit(*this);
    }
};

// Concrete visitor class: PrintVisitor
class PrintVisitor : public BirdVisitor {
public:
    void visit(Sparrow& sparrow) override {
        std::cout << "Printing data for Sparrow" << std::endl;
    }

    void visit(Pigeon& pigeon) override {
        std::cout << "Printing data for Pigeon" << std::endl;
    }
};

int main() {
    Sparrow sparrow;
    Pigeon pigeon;
    PrintVisitor printVisitor;

    sparrow.accept(printVisitor); // Output: Printing data for Sparrow
    pigeon.accept(printVisitor); // Output: Printing data for Pigeon

    return 0;
}

文章来源地址https://www.toymoban.com/news/detail-848647.html

到了这里,关于《访问者模式(极简c++)》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式——19. 访问者模式

    访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不改变元素类(被访问者)的前提下,定义对元素的新操作(访问者),并将这些操作封装到独立的访问者类中。这样,你可以在不修改被访问者的类的情况下,通过不同的访问者来执行不同的操作。 访问者模式

    2024年02月07日
    浏览(38)
  • 设计模式之访问者模式(上)

    访问者模式 1)概述 1.概念 访问者模式包含 访问者 和 被访问元素 两个主要组成部分。 处方单中的各种药品信息就是 被访问的元素 ,而划价人员和药房工作人员就是 访问者 ,被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。 被访问元素

    2024年04月25日
    浏览(40)
  • 设计模式之访问者模式(下)

    3)访问者模式与组合模式联用 1.概述 在访问者模式中,包含一个用于存储元素对象集合的对象结构,可以使用迭代器来遍历对象结构,同时具体元素之间可以存在整体与部分关系,有些元素作为容器对象,有些元素作为成员对象,可以使用组合模式来组织元素。 2.结构图

    2024年04月25日
    浏览(44)
  • Java设计模式-访问者模式

    在软件开发领域中,设计模式是解决常见问题的经典方法。其中,访问者模式是一种强大且灵活的设计模式,用于处理对象结构中的元素,并根据不同的访问者实现不同的操作。 访问者模式是一种行为型设计模式,它允许你在不改变元素类的前提下定义新的操作。该模式将算

    2024年02月06日
    浏览(52)
  • js设计模式:访问者模式

    将操作方法封装在一个访问者对象中,而不是封装在每个被访问对象当中。 访问者对象可以通过调用被访问者的接口,用来操作被访问者。

    2024年02月22日
    浏览(64)
  • 03-JAVA设计模式-访问者模式

    访问者模式(Visitor Pattern)是软件设计模式中的一种行为模式,它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中,我们定义了两个主要角色: 访问者(Visitor): 这个接口声明了一个访问元

    2024年04月29日
    浏览(45)
  • 设计模式(二十三)访问者

    表示一个作用于某对象结构中的各个元素的操作。访问者模式让你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式 访问者模式是一种较为复杂的行为型模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素

    2024年02月19日
    浏览(38)
  • 【设计模式与范式:行为型】69 | 访问者模式(下):为什么支持双分派的语言不需要访问者模式?

    上一节课中,我们学习了访问者模式的原理和实现,并且还原了访问者模式诞生的思维过程。总体上来讲,这个模式的代码实现比较难,所以应用场景并不多。从应用开发的角度来说,它的确不是我们学习的重点。 不过,我们前面反复说过,学习我的专栏,并不只是让你掌握

    2024年02月10日
    浏览(45)
  • 笨蛋学设计模式行为型模式-访问者模式【21】

    8.8.1概念 ​ 访问者模式是一种将操作逻辑与对象结构分离的方法,使得操作可以独立变化,操作逻辑被封装在独立的访问者类中,并在被访问的元素类中提供接受访问者的方法,而不是直接嵌入到数据结构中的对象中。 8.8.2场景 ​ 我们可以将一个购物商场中的商品类作为元

    2024年01月23日
    浏览(52)
  • 瑞_23种设计模式_访问者模式

    🙊 前言:本文章为瑞_系列专栏之《23种设计模式》的访问者模式篇。本文中的部分图和概念等资料,来源于博主学习设计模式的相关网站《菜鸟教程 | 设计模式》和《黑马程序员Java设计模式详解》,特此注明。本文中涉及到的软件设计模式的概念、背景、优点、分类、以及

    2024年04月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包