美文网首页
中介者模式 C++实现

中介者模式 C++实现

作者: 假程序员 | 来源:发表于2019-03-12 23:47 被阅读0次
//
//  main.cpp
//  meditor_pattern
//
//  Created by apple on 2019/3/12.
//  Copyright © 2019年 apple. All rights reserved.
//

#include <iostream>
#include <string>
using namespace std;

class IPerson;
class IMediator
{
protected:
    IPerson **A;//卖家
    IPerson **B;///买家
public:
    IMediator(IPerson **saler, IPerson **buyer) {A = saler; B = buyer;}
    virtual IMediator *change_saler_or_buyer(IPerson **saler, IPerson **buyer) = 0;
    virtual void sale(int num) = 0;
    virtual void buy(int num) = 0;
    virtual ~IMediator() {}
};
class IPerson
{
public:
    int num;//所拥有的房屋数量
    string name;//姓名
    virtual void sale_house(int, IMediator *) = 0;//卖房者通过中介卖房
    virtual void buy_house(int, IMediator *) = 0;//买房者通过中介买房
    virtual ~IPerson() {}
};
class Saler:public IPerson
{
public:
    Saler(string name) {this->name = name; this->num = 5;} //卖房者初始拥有5套房
    void sale_house(int num, IMediator *mediator) {if(this->num-num>=0){this->num-=num;mediator->sale(num);}else{cout<<"not enough"<<endl;}}
    void buy_house(int num, IMediator *mediator){}//针对卖房者,未做具体实现
};
class Buyer:public IPerson
{
public:
    Buyer(string name){this->name = name; this->num = 0;}//买房者初始拥有0套房
    void sale_house(int num, IMediator *mediator){}//针对买房者,未做具体实现
    void buy_house(int num, IMediator *mediator){this->num+=num;mediator->buy(num);}
};
class Mediator: public IMediator
{
public:
    Mediator(IPerson **saler, IPerson **buyer):IMediator(saler, buyer) {}
    IMediator *change_saler_or_buyer(IPerson **saler, IPerson **buyer){A = saler; B = buyer; return this;}
    void sale(int num){(*B)->num += num;}
    void buy(int num){(*A)->num -= num;}
};

int main(int argc, const char * argv[]) {
    IPerson *saler = new Saler("saler");
    IPerson *buyer = new Buyer("buyer");
    IMediator *mediator = new Mediator(&saler, &buyer);
    
    saler->sale_house(2, mediator);//saler通过中介者mediator卖了2套房,这两套房卖给了buyer
    //对于saler,他知道自己的信息,同时还知道中介提供了买/卖房接口,对于中介如何卖房,saler并不清楚;
    buyer->buy_house(1, mediator);//
    cout<<saler->name<<":"<<saler->num<<endl;
    cout<<buyer->name<<":"<<buyer->num<<endl;
    delete mediator;
    delete saler;
    delete buyer;
    return 0;
}
saler:2
buyer:3
Program ended with exit code: 0

相关文章

网友评论

      本文标题:中介者模式 C++实现

      本文链接:https://www.haomeiwen.com/subject/kykapqtx.html