为啥用这个栗子,不解释了。 (圆的是女的,五角星是男的) 好,现在哪两对互看不顺眼了,要换人,然后再换人,再换人,这个图越弄越乱了。 媒人相亲模式是这样的: 但是这样中间人的责任就过大,是违背了单一职责原则。因为中间人就需要认识那么多人,你有办法? 中介者模式的优势就在于它的集中处理,但是缺点也在这里。 中介者模式很容易在系统中应用,当然,也很容易误用。 中介者模式站在一个更宏观的角度,将交互复杂性集中到了自己身上,这就使得中介者变得比每个同事类更复杂。 所以,双刃剑,而且是绝对锋利的双刃剑。
大型相亲现场 VS 传统媒人模式
大型相亲现场是这样的:
有没有发现这个图,耦合度极高。
这样就实现了每对男男女女之间的解耦。有啥事儿跟中间人说一下,让中间人去解决。
中介者模式架构
UML类图代码实现
#include<iostream> using namespace std; class Mediator; //定义一个类,但是不马上实现,这招我以前还真没试过。涨知识了 //因为下面两个类要互包 //抽象同事类 class Colleague { protected : Mediator *mediator; public: Colleague(Mediator* m) { mediator = m; } virtual void Sent(string message) = 0; }; //抽象中介者类 class Mediator { public: virtual void Send(string message, Colleague *colleague) = 0; }; //具体同事类 class ConcreteColleague1 :public Colleague { public: ConcreteColleague1(Mediator* m) : Colleague(m) {} void Sent(string message) { mediator->Send(message, this); } void Notify(string message) { cout << "同事1得到消息:" << message << endl; } }; class ConcreteColleague2 :public Colleague { public: ConcreteColleague2(Mediator* m) : Colleague(m) {} void Sent(string message) { mediator->Send(message, this); } void Notify(string message) { cout << "同事2得到消息:" << message << endl; } }; //具体中介者类 class Concretemediator :public Mediator { private: ConcreteColleague1* colleague1; ConcreteColleague2* colleague2; public: //无法将父类对象转化为子类对象,所以采用第二种方法 /*void SetColleague1(Colleague* pColleague){ colleague1 = pColleague; } void SetColleague2(Colleague* pColleague){ colleague2 = pColleague; }*/ void SetColleague1(Colleague* pColleague){ colleague1 = dynamic_cast<ConcreteColleague1*>(pColleague); } void SetColleague2(Colleague * pColleague){ colleague2 = dynamic_cast<ConcreteColleague2*>(pColleague); } void Send(string message, Colleague* colleague){ if (colleague == colleague1) colleague2->Notify(message); else if (colleague == colleague2) colleague1->Notify(message); } }; int main() { Concretemediator* mediator = new Concretemediator(); ConcreteColleague1* colleague1 = new ConcreteColleague1(mediator); //让他俩认识一下中介 ConcreteColleague2* colleague2 = new ConcreteColleague2(mediator); mediator->SetColleague1(colleague1); //让中介认识一下他俩 mediator->SetColleague2(colleague2); colleague1->Sent("有男朋友没?"); colleague2->Sent("有了"); return 0; }
中介者模式优劣分析
当系统中出现了“多对多”的集群现象时,先不要急着套上中介者模式,先分析清楚自己的系统设计是不是合理。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算