> 文档中心 > 中介者模式

中介者模式


中介模式

概念

中介者模式(Mediator)是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。

适用于:
用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换。

优缺点:

  • 将系统按功能分割成更小的对象,符合类的最小设计原则
  • 对关联对象的集中控制
  • 减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
  • 有利于提高类的重用性

结构图

在这里插入图片描述

简单实现

简单例子实现

这个例子,buyer和seller之间的交互要通过Mediator来实现。Mediator的对象起着控制作用。

首先设计AbsMediator类和它的子类Mediator,以及Person类及其它的子类Buyer类和Seller类。

然后AbsMediator关联Buyer和Seller,通过把它们作为AbsMediator的成员变量来实现关联,从而在Mediator中实现控制、交互。

具体实现

#include#include#includeusing namespace std;class Person{public:Person(string namee,string housee):name(namee),house(housee){}string getHouse(){return house;}protected:string name;string house; };class Seller : public Person{public:Seller(string namee,string housee):Person(namee,housee){}};class Buyer : public Person {public:Buyer(string namee,string housee):Person(namee,housee){}};class AbsMediator{public:AbsMediator(Person* sellerr,Person* buyerr):seller(sellerr),buyer(buyerr){}virtual void makedeal()=0;protected:Person* seller;Person* buyer;};class Mediator : public AbsMediator{public:Mediator(Person* sellerr,Person* buyerr):AbsMediator(sellerr,buyerr){}void makedeal(){if(buyer->getHouse()==seller->getHouse()){cout<<"success"<<endl;}else{cout<<"fail"<<endl;}}};int main(){Person *buyer=new Buyer("John","h1");Person *seller=new Seller("Sarah","h1");AbsMediator * mediator=new Mediator(seller,buyer);mediator->makedeal();delete mediator;delete seller;delete buyer;return 0;}