《访问者模式(极简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;
}

相关推荐

  1. 访问模式c++)》

    2024-04-12 16:10:01       17 阅读
  2. 《建造模式c++)》

    2024-04-12 16:10:01       26 阅读
  3. 《观察模式c++)》

    2024-04-12 16:10:01       15 阅读
  4. 模版模式c++)》

    2024-04-12 16:10:01       12 阅读
  5. 《工厂模式c++)》

    2024-04-12 16:10:01       21 阅读
  6. 《原型模式c++)》

    2024-04-12 16:10:01       26 阅读
  7. 《过滤器模式c++)》

    2024-04-12 16:10:01       22 阅读
  8. 《适配器模式c++)》

    2024-04-12 16:10:01       20 阅读
  9. 《组合模式c++)》

    2024-04-12 16:10:01       20 阅读
  10. 《外观模式c++)》

    2024-04-12 16:10:01       19 阅读

最近更新

  1. 中介子方程五十

    2024-04-12 16:10:01       0 阅读
  2. MyBatis(33)MyBatis 在设计上的最佳实践有哪些

    2024-04-12 16:10:01       1 阅读
  3. https创建证书

    2024-04-12 16:10:01       1 阅读
  4. 环境瘦身术:Conda包依赖的自动清理指南

    2024-04-12 16:10:01       1 阅读
  5. Django 实现子模版继承父模板

    2024-04-12 16:10:01       1 阅读
  6. [面试爱问] https 的s是什么意思,有什么作用?

    2024-04-12 16:10:01       1 阅读

热门阅读

  1. Erlang 常用数据结构实现

    2024-04-12 16:10:01       17 阅读
  2. OTN和波分的区别

    2024-04-12 16:10:01       17 阅读
  3. vue简单使用五(组件的使用)

    2024-04-12 16:10:01       15 阅读
  4. 安卓手机APP开发的实践_点击行为

    2024-04-12 16:10:01       16 阅读
  5. Android - VideoView需要按两次BACK才能退出解决方法

    2024-04-12 16:10:01       17 阅读
  6. Android MediaPlayer 深入分析与实践

    2024-04-12 16:10:01       15 阅读
  7. Linux输出输入重定向

    2024-04-12 16:10:01       17 阅读
  8. 运维面试题

    2024-04-12 16:10:01       14 阅读
  9. 02独立按键计数

    2024-04-12 16:10:01       17 阅读
  10. MEF [ImportMany]

    2024-04-12 16:10:01       17 阅读
  11. 《C缺陷和陷阱》-笔记(8)

    2024-04-12 16:10:01       14 阅读