访问模式(visitor)

  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 }
代码示例

 

posted @ 2024-01-15 13:56  泽良_小涛  阅读(2)  评论(0编辑  收藏  举报