行为设计模式:中介者模式

概念

该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。可用于减少对象之间混乱无序的依赖关系。

代码示例

代码来自这里

//抽象中介机构
class Mediator
{
public:
    virtual void Send(QString message,class Person *sender) {}
    virtual void SetA(Person *A) {}  //设置其中一方
    virtual void SetB(Person *B) {}
};

//抽象人
class Person
{
protected:
    class Mediator * mediator; //中介
public:
    virtual void SetMediator(Mediator *mediator){}  //设置中介
    virtual void SendMessage(QString message) {}    //向中介发送信息
    virtual void GetMessage(QString message) {}     //从中介获取信息
};

//房屋中介
class HouseMediator : public Mediator
{
private:
    Person * A; //租房者
    Person * B; //房东
public:
    HouseMediator(): A(0), B(0) {}
    void SetA(Person *A)
    {
        this->A = A;
    }
    void SetB(Person *B)
    {
        this->B = B;
    }
    void Send(QString message, Person * sender)
    {
        if(sender == A) //租房者给房东发信息
            B->GetMessage(message); //房东收到信息
        else
            A->GetMessage(message);
    }
};

//租房者
class Renter: public Person
{
public:
    void SetMediator(Mediator *mediator)
    {
        this->mediator = mediator;
    }
    void SendMessage(QString message)
    {
        mediator->Send(message, this);
    }
    void GetMessage(QString message)
    {
        qDebug()<<"租房者收到信息"<<message;
    }
};

//房东
class Landlord: public Person
{
public:
    void SetMediator(Mediator *mediator)
    {
        this->mediator = mediator;
    }
    void SendMessage(QString message)
    {
        mediator->Send(message, this);
    }
    void GetMessage(QString message)
    {
        qDebug()<<"房东收到信息:"<<message;
    }
};

int main(int argc, char *argv[])
{
    Mediator *mediator = new HouseMediator();//房屋中介
    Person *person1 = new Renter();    //租房者
    Person *person2 = new Landlord();  //房东
    mediator->SetA(person1);
    mediator->SetB(person2);
    person1->SetMediator(mediator);
    person2->SetMediator(mediator);
    person1->SendMessage("我想在南京路附近租套房子,价格800元一个月");
    person2->SendMessage("出租房子:南京路100号,70平米,1000元一个月");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值