• 中介者模式


    【1】什么是中介者模式?

    中介者模式:

    【2】中介者模式代码示例:

    代码示例:

     1 #include<iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class Mediator;
     6 class ConcreteColleague1;
     7 class ConcreteColleague2;
     8 
     9 class Colleague
    10 {
    11 protected:
    12     Mediator *mediator;
    13 public:
    14     Colleague(Mediator *mediator)
    15     {
    16         this->mediator = mediator;
    17     }
    18 };
    19 
    20 
    21 class ConcreteColleague1 : public Colleague
    22 {
    23 public:
    24     ConcreteColleague1(Mediator *mediator) : Colleague(mediator)
    25     {}
    26     void send(string message);
    27     void notify(string message)
    28     {
    29         cout << "同事1得到消息: " << message << endl;
    30     }
    31 };
    32 
    33 class ConcreteColleague2 : public Colleague
    34 {
    35 public:
    36     ConcreteColleague2(Mediator *mediator) : Colleague(mediator)
    37     {}
    38     void send(string message);
    39     void notify(string message)
    40     {
    41         cout << "同事2得到消息: " << message << endl;
    42     }
    43 };
    44 
    45 class Mediator
    46 {
    47 public:
    48     virtual void send(string name, Colleague *colleague)=0;
    49 };
    50 
    51 class ConcreteMediator : public Mediator
    52 {
    53 public:
    54     ConcreteColleague1 *colleague1;
    55     ConcreteColleague2 *colleague2;
    56 public:
    57     void send(string message, Colleague *colleague)
    58     {
    59         if (colleague == colleague1)
    60         {
    61             colleague2->notify(message);
    62         }
    63         else
    64         {
    65             colleague1->notify(message);
    66         }
    67     }
    68 };
    69 
    70   
    71 void ConcreteColleague1::send(string message) 
    72 {
    73     mediator->send(message, this);
    74 }
    75 
    76 void ConcreteColleague2::send(string message) 
    77 {
    78     mediator->send(message, this);
    79 }
    80 
    81 int main()
    82 {
    83     ConcreteMediator *m = new ConcreteMediator();
    84     ConcreteColleague1 *c1 = new ConcreteColleague1(m);
    85     ConcreteColleague2 *c2 = new ConcreteColleague2(m);
    86 
    87     m->colleague1 = c1;
    88     m->colleague2 = c2;
    89 
    90     c1->send("吃饭啦");
    91     c2->send("");
    92 
    93     return 0;
    94 }
    95 //Result:
    96 /*
    97 同事2得到消息: 吃饭啦
    98 同事1得到消息: 去
    99 */
    View Code

    代码示例2:

     1 #include<iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 class Country;
     6 
     7 class UniteNations
     8 {
     9 public:
    10     virtual void declare(string message, Country *colleague) = 0;
    11 }; 
    12 
    13 class Country
    14 {
    15 protected:
    16     UniteNations *mediator;
    17 public:
    18     Country(UniteNations *mediator)
    19     {
    20         this->mediator = mediator;
    21     }
    22 };
    23 
    24 class USA : public Country
    25 {
    26 public:
    27     USA(UniteNations *mediator) : Country(mediator)
    28     {}
    29     void declare(string message)
    30     {
    31         mediator->declare(message, this);
    32     }
    33     void getMessage(string message)
    34     {
    35         cout << "美国获得对方信息: " << message << endl;
    36     }
    37 };
    38 
    39 class Iraq : public Country
    40 {
    41 public:
    42     Iraq(UniteNations *mediator):Country(mediator)
    43     {}
    44     void declare(string message)
    45     {
    46         mediator->declare(message, this);
    47     }
    48     void getMessage(string message)
    49     {
    50         cout << "伊拉克获得对方信息: " << message << endl;
    51     }
    52 };
    53 
    54 class UnitedNationsSecurityCouncil:public UniteNations
    55 {
    56 public:
    57     USA *usa;
    58     Iraq *iraq;
    59     void declare(string message, Country *colleague)
    60     {
    61         if (colleague == usa)
    62         {
    63             iraq->getMessage(message);
    64         }
    65         else
    66         {
    67             usa->getMessage(message); 
    68         }
    69     }
    70 };
    71 
    72 int main()
    73 {
    74     UnitedNationsSecurityCouncil *unsc = new UnitedNationsSecurityCouncil();
    75     
    76     USA *c1 = new USA(unsc);
    77     Iraq *c2 = new Iraq(unsc);
    78 
    79     unsc->usa = c1;
    80     unsc->iraq = c2;
    81 
    82     c1->declare("不准开发核武器,否则打你!");
    83     c2->declare("他妈的美国去死!");
    84 
    85     return 0;
    86 }
    87 //Result:
    88 /*
    89 伊拉克获得对方信息: 不准开发核武器,否则打你!
    90 美国获得对方信息: 他妈的美国去死!
    91 */
    View Code

     

    Good   Good   Study,  Day   Day  Up.

    顺序   选择   循环   总结

  • 相关阅读:
    Python基础:数据类型-列表与元组(6)
    Python基础:数据类型-数字(5)
    Python基础:编码规范(4)
    Python基础:语法基础(3)
    Python基础:第一个Python程序(2)
    Python基础:搭建开发环境(1)
    Vue.js 2.x笔记:服务请求axios(8)
    Vue.js 2.x笔记:状态管理Vuex(7)
    一位资深传统型软件开发者的思考:传统软件企业危机四伏【转】
    基于cesium的GIS洪水淹没三维模拟系统
  • 原文地址:https://www.cnblogs.com/Braveliu/p/3956897.html
Copyright © 2020-2023  润新知