如何在C++中实现访问者设计模式?

如何在 c++++ 中实现访问者设计模式?定义一个接口表示访问者类。定义一组元素类,具体访问者类将访问这些元素。定义具体访问者类,实现特定算法或操作。

如何在C++中实现访问者设计模式?

如何在 C++ 中实现访问者设计模式

访问者设计模式是一种行为设计模式,它允许我们分离算法和数据结构。它定义了一种访问者“访问”各种类型的“元素”对象的操作,而无需修改这些对象的类。

实现

立即学习“C++免费学习笔记(深入)”;

为了在 C++ 中实现访问者设计模式,我们需要以下步骤:

定义一个接口,用于表示访问者类。定义一组元素类,具体访问者类将访问这些元素。定义具体访问者类,实现特定算法或操作。

代码示例

假设我们有一个形状类的层次结构,其中有矩形、圆形和三角形。我们创建一个访问者类来计算这些形状的总面积。

Shape.h

struct Shape {    virtual double area() = 0;    virtual void accept(Visitor* visitor) = 0;};

Rectangle.h

class Rectangle : public Shape {    double width, height;public:    Rectangle(double w, double h): width(w), height(h) {}    double area() override { return width * height; }    void accept(Visitor* visitor) override { visitor->visitRectangle(this); }};

Circle.h

class Circle : public Shape {    double radius;public:    Circle(double r): radius(r) {}    double area() override { return 3.14 * radius * radius; }    void accept(Visitor* visitor) override { visitor->visitCircle(this); }};

Triangle.h

class Triangle : public Shape {    double base, height;public:    Triangle(double b, double h): base(b), height(h) {}    double area() override { return 0.5 * base * height; }    void accept(Visitor* visitor) override { visitor->visitTriangle(this); }};

Visitor.h

class Visitor {public:    virtual void visitRectangle(Rectangle* rectangle) = 0;    virtual void visitCircle(Circle* circle) = 0;    virtual void visitTriangle(Triangle* triangle) = 0;};

AreaCalculatorVisitor.h

class AreaCalculatorVisitor : public Visitor {    double totalArea;public:    AreaCalculatorVisitor(): totalArea(0) {}    void visitRectangle(Rectangle* rectangle) override { totalArea += rectangle->area(); }    void visitCircle(Circle* circle) override { totalArea += circle->area(); }    void visitTriangle(Triangle* triangle) override { totalArea += triangle->area(); }    double getTotalArea() { return totalArea; }};

实战案例

在主函数中,我们可以创建形状对象,并使用访问者来计算它们的总面积:

int main() {    vector shapes;    shapes.push_back(new Rectangle(2, 3));    shapes.push_back(new Circle(4));    shapes.push_back(new Triangle(5, 6));    AreaCalculatorVisitor visitor;    for (Shape* shape : shapes) {        shape->accept(&visitor);    }    cout << "Total area: " << visitor.getTotalArea() << endl;    return 0;}

输出:

Total area: 78.54

以上就是如何在C++中实现访问者设计模式?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1453707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 06:13:30
下一篇 2025年12月18日 06:13:49

相关推荐

发表回复

登录后才能评论
关注微信