中介者模式:用一个中介来封装一系列的对象交互。中介者使各个对象不需要显示的相互调用,从而实现使其松散的耦合,而且可以独立的改变他们之间的交互。
场景:
1.对象之间定义良好并且之间有复杂的通信关系。
2.一个对象引用其他对象并且直接与这些对象通信,导致难以服用该对象。
3.定制一个分布在多个类中的行为,而又不想产生太多的子类。
#include <stdio.h>
class Buyer {
public:
virtual void buy() = 0;
};
class BuyerA :public Buyer {
public:
BuyerA() {
}
void buy() {
printf("A想买房!\n");
}
};
class BuyerB : public Buyer {
public:
BuyerB() {
}
void buy() {
printf("B想买房!\n");
}
};
class Agent {
public:
virtual void opt(int buy) = 0;
};
class LiajiaAgent :public Agent {
public:
LiajiaAgent(Buyer*A, Buyer*B) {
_buyerA = A;
_buyerB = B;
}
void ABuy() {
_buyerA->buy();
}
void BBuy() {
_buyerB->buy();
}
void opt(int buy) {
if(buy == 1) {
_buyerA->buy();
} else {
_buyerB->buy();
}
}
private:
Buyer* _buyerA;
Buyer* _buyerB;
};
int main() {
Buyer* buyerA = new BuyerA;
Buyer* buyerB = new BuyerB;
LiajiaAgent* agent = new LiajiaAgent(buyerA, buyerB);
agent->opt(1);
agent->opt(3);
return 0;
}
运行结果: