设计模式(十三)--中介者模式
2017-05-19 14:52
246 查看
定义
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。结构图
例子
//同事基类 class Colleage { private: string m_strName; string m_strContent; public: Colleage(string n = ""):name(n){}; void setName(string name) { m_strName = name; } string getName() { return m_strName; } void setContent(string content) { m_strContent = content; } string getContent() { return m_strContent; } virtual void talk(){}; }; //班长子类 class Monitor : public Colleage { public: Monitor(string n = ""):Colleage(n){}; virtual void talk() { cout<<"Monitor"<<getName()<<"Say:"<<getContent<<endl; } }; //学生A子类 class StudentA : public Colleage { public: StudentA(string n = ""):Colleage(n){}; virtual void talk() { cout<<"StudentA"<<getName()<<"Say:"<<getContent<<endl; } }; //学生B子类 class StudentB : public Colleage { public: StudentB(string n = ""):Colleage(n){}; virtual void talk() { cout<<"StudentA"<<getName()<<"Say:"<<getContent<<endl; } }; //中介者基类 class Mediator { public: vector<Colleage *> studentList; virtual void addStudent(Colleage *student) { studentList.push_back(student); } virtual void notify(Colleage *student){}; }; //中介者子类 class QQMediator : public Mediator { public: virtual void notify(Colleage *student) { student->talk(); for(int i = 0; i < studentList.size(); i++) { if(student != studentList[i]) { studentList[i]->talk(); } } } }; //客户端调用 int main() { QQMediator qq; Monitor *monitor = new Monitor("dd"); StudentA *studentA = new StudentA("Jd"); StudentB *studentB = new StudentA("Jddd"); qq.addStudent(studentA); qq.addStudent(studentB); monitor->setContent("Notify"); qq.notify(monitor); return 0; }
适用场景
(1) 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。(2) 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
(3) 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
优点
(1) 降低了系统对象之间的耦合性,使得对象易于独立的被复用。(2) 提高系统的灵活性,使得系统易于扩展和维护。
缺点
由于我们这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。相关文章推荐
- 设计模式C++实现(13)——中介者模式
- JAVA设计模式十三--Mediator(中介者模式)
- 设计模式(五):中介者模式
- 设计模式(20)-中介者模式
- 设计模式(17)------中介者模式
- 设计模式学习(十三)迭代器模式-中介者模式
- 设计模式系列之十三代理模式
- 设计模式(中介者模式)
- 设计模式C++实现(13)——中介者模式(Mediator)
- (十三)中介者模式详解(玄幻版)
- 设计模式(二十二)—中介者模式(行为型)
- (十三)中介者模式详解(玄幻版)
- (十三)中介者模式详解(玄幻版)
- 设计模式(18)——中介者模式(Mediator Pattern)
- 设计模式(16)——中介者模式
- 设计模式C++实现(13)——中介者模式
- (十三)中介者模式详解(玄幻版)
- 设计模式(c++)笔记之十三(Template模式)
- 设计模式C++实现(13)——中介者模式
- (十三)中介者模式详解(玄幻版)