12.2
软件设计 石家庄铁道大学信息学院
实验 25:访问者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解访问者模式的动机,掌握该模式的结构;
2、能够利用访问者模式法解决实际问题。
[实验任务一]:打包员
在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。
实验要求:
1. 提交源代码,不要提交类图;
2. 注意编程规范。
#include <iostream>
#include <vector>
using namespace std;
class Visitor;
class Product
{
public:
virtual void accept()=0;
};
class Book:public Product
{
public:
void accept()
{
cout<<"书";
}
};
class Apple:public Product
{
public:
void accept()
{
cout<<"苹果";
}
};
class Visitor
{
public:
string name;
void setName(string nam)
{
name=nam;
}
virtual void visit(Product* pro)=0;
};
class Saler:public Visitor
{
public:
void visit(Product* pro)
{
cout<<"收银员"<<name<<"给";
pro->accept();
cout<<"过秤,然后计算其价格。"<<endl;
}
};
class Customer:public Visitor
{
public:
void visit(Product* pro)
{
cout<<"顾客"<<name<<"买";
pro->accept();
cout<<endl;
}
};
class Packagor:public Visitor
{
public:
void visit(Product* pro)
{
cout<<"打包员"<<name<<"将";
pro->accept();
cout<<"打包。"<<endl;
}
};
class BuyBasket
{
private:
vector<Product*> list;
public:
void accept(Visitor* visitor)
{
for(int i=0;i<list.size();i++)
{
visitor->visit(list[i]);
}
}
void addProduct(Product* product)
{
list.push_back(product);
}
};
int main()
{
Product* b1=new Book();
Product* b2=new Book();
Product* a1=new Apple();
Visitor* visitor,* visitor1;
BuyBasket* basket=new BuyBasket();
visitor=new Saler();
visitor1=new Packagor();
basket->addProduct(b1);
basket->addProduct(b2);
basket->addProduct(a1);
visitor->setName("张三");
visitor1->setName("李四");
basket->accept(visitor);
basket->accept(visitor1);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统