首页 > 其他分享 >访问模式(visitor)

访问模式(visitor)

时间:2024-01-15 14:00:12浏览次数:27  
标签:dial visitor void visit 模式 class 访问 virtual public

  1 #include <iostream>
  2 #include <string>
  3 using namespace std;
  4 
  5 //访问者模式:核心叫做双重分发:两个多态:accept,visit
  6 
  7 class XiaoMi;
  8 class HuaWei;
  9 class Oppo;
 10 class CellPhoneVisitor {
 11 public:
 12     virtual void visit(XiaoMi* p) = 0;
 13     virtual void visit(HuaWei* p) = 0;
 14     virtual void visit(Oppo* p) = 0;
 15 protected:
 16     CellPhoneVisitor(){}
 17 };
 18 
 19 
 20 class CellPhone {
 21 public:
 22     virtual void dial() = 0;
 23     virtual void sendMsg() = 0;
 24     virtual void hang() = 0;
 25     virtual void recvMsg() = 0;
 26     virtual void accept(CellPhoneVisitor* p) = 0;
 27     //Solaris系统-->
 28     //Win7/win10
 29     //Mac
 30 protected:
 31     CellPhone(){}
 32 };
 33 
 34 class XiaoMi :public CellPhone {
 35 public:
 36     void dial() { cout << "小米" << "在拨号" << endl; }
 37     void sendMsg() { cout << "小米" << "在发短信" << endl; }
 38     void hang() { cout << "小米" << "在关断电话" << endl; }
 39     void recvMsg() { cout << "小米" << "在收短信" << endl; }
 40     void accept(CellPhoneVisitor* p) {
 41         p->visit(this);
 42     }
 43 };
 44 
 45 class HuaWei :public CellPhone {
 46 public:
 47     void dial() { cout << "HuaWei" << "在拨号" << endl; }
 48     void sendMsg() { cout << "HuaWei" << "在发短信" << endl; }
 49     void hang() { cout << "HuaWei" << "在关断电话" << endl; }
 50     void recvMsg() { cout << "HuaWei" << "在收短信" << endl; }
 51     void accept(CellPhoneVisitor* p) {
 52         p->visit(this);
 53     }
 54 };
 55 
 56 class Oppo :public CellPhone {
 57 public:
 58     void dial() { cout << "Oppo" << "在拨号" << endl; }
 59     void sendMsg() { cout << "Oppo" << "在发短信" << endl; }
 60     void hang() { cout << "Oppo" << "在关断电话" << endl; }
 61     void recvMsg() { cout << "Oppo" << "在收短信" << endl; }
 62     void accept(CellPhoneVisitor* p) {
 63         p->visit(this);
 64     }
 65 };
 66 
 67 class SolarisConfigure : public CellPhoneVisitor {
 68 public:
 69     void visit(XiaoMi *p) {
 70         p->dial();
 71         p->hang();
 72         p->sendMsg();
 73         p->recvMsg();
 74     }
 75 
 76     void visit(HuaWei *p) {
 77         p->dial();
 78         p->hang();
 79         p->sendMsg();
 80         p->recvMsg();
 81     }
 82     void visit(Oppo *p) {
 83         p->dial();
 84         p->hang();
 85         p->sendMsg();
 86         p->recvMsg();
 87     }
 88 };
 89 
 90 int main(void) {
 91     CellPhoneVisitor* pVisitor = new SolarisConfigure;
 92     XiaoMi* pXiaoMi = new XiaoMi;
 93     HuaWei* pHuaWei = new HuaWei;
 94     Oppo* pOppo = new Oppo;
 95     cout << "将Solairs环境配置给XiaoMi" << endl;
 96     pXiaoMi->accept(pVisitor);
 97     cout << "将Solairs环境配置给HuaWei" << endl;
 98     pHuaWei->accept(pVisitor);
 99     cout << "将Solairs环境配置给Oppo" << endl;
100     pOppo->accept(pVisitor);
101     system("pause");
102     return 0;
103 }
代码示例

 

标签:dial,visitor,void,visit,模式,class,访问,virtual,public
From: https://www.cnblogs.com/zeliangzhang/p/17965217

相关文章

  • Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
    场景Mysql中怎样设置指定ip远程访问连接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/115308120前面设置root账户指定ip能连接访问是通过命令行的方式,如果通过可视化工具比如Navicat来实现。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、使用N......
  • 企业如何选择适合自己的即时通讯软件?先了解这3种部署模式
    当今信息化时代,即时通讯软件已经成为企业日常沟通的不可或缺的工具,而如何选择适合自己的即时通讯软件也成为了企业面临的重要问题。下面我将从部署方式出发,深入分析即时通讯软件的部署方式以及优劣势,帮助企业更好地选择适合自己的即时通讯软件。一、Saas部署模式SaaS部署模式是指基......
  • 设计模式--UML类图
    ‘动物’矩形框,它就代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected......
  • Rsync未授权访问漏洞
    开设这个随笔主要是因为最近在学习王放do9gy老师的web漏洞解析与攻防实战。顺便完成里面的配套实验了,其实大部分靶场都是来在vulhub,相当于对人家的靶场进行依次复现了。内容可以在https://vulhub.org/#/environments/rsync/common/见到。毕竟理论是理论,实战是实战。搭建个靶场......
  • 【设计模式】策略模式——策略模式在JDK源码中的应用
    策略模式在JDK中具有广泛的应用,本文只讨论最常见的应用。RejectedExecutionHandler在线程池使用有界队列并且最大线程数不为Integer.MAX_VALUE的时候,一旦task数量达到临界点,新的task添加到线程池的时候就会出现问题,ThreadPoolExecutor的构造方法中参数最多的方法中最后一个参数就是......
  • python面向对象之单例模式的使用
    单例模式​ 单例模式(SingletonPattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。​ 比如,某个程序的配置信息存放在一个文件中,客户端通过一个Appconfig的类来读取配置......
  • spring与设计模式之四适配器模式
    一、定义适配器模式-或者称为转接口模式,变压器模式。通过适配,可以让原来提供特定功能的对象完成另外一个标准的功能。所以,所谓的适配应该可以这样称呼:让某些类/接口适配/转换某个标准/功能。适配器器的重点是适配,就是新增(装饰)。为了便于记忆和理解,读者最好根据自己的习惯来命......
  • 建造者模式
    定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,用户只需要指定需要建造的类型就可以得到它们,建造过程及细节不需要知道使用场景:如果一个对象有非常复杂的数据结构(很多属性),想把复杂的创建和使用分离优点:封装性好,创建和使用分离扩展性......
  • Golang流水线设计模式实践
    Golang流水线设计模式实践原创 俞凡DeepNoMind DeepNoMind 2024-01-1411:45 发表于上海 听全文流水线设计模式对于顺序处理业务数据非常有用,可以以一致的方式直观的定义对数据的处理流程。原文: UsingaPipelinePatterninGolang[1]到目前为止,我已经将Gola......
  • 博客后台接口分页优化-访问记录篇
    博客后台接口优化-访问记录......