中介者模式
2015-09-29 20:01
176 查看
概念
Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。
角色和职责
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。
Mediator抽象中介者:中介者类的抽象父类。
concreteMediator:具体的中介者类。
Colleague:关联类的抽象父类。
concreteColleague:具体的关联类。
适用于:用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换。
模式优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
案例
Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。
角色和职责
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。
Mediator抽象中介者:中介者类的抽象父类。
concreteMediator:具体的中介者类。
Colleague:关联类的抽象父类。
concreteColleague:具体的关联类。
适用于:用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换。
模式优点
1,将系统按功能分割成更小的对象,符合类的最小设计原则
2,对关联对象的集中控制
3,减小类的耦合程度,明确类之间的相互关系:当类之间的关系过于复杂时,其中任何一个类的修改都会影响到其他类,不符合类的设计的开闭原则 ,而Mediator模式将原来相互依存的多对多的类之间的关系简化为Mediator控制类与其他关联类的一对多的关系,当其中一个类修改时,可以对其他关联类不产生影响(即使有修改,也集中在Mediator控制类)。
4,有利于提高类的重用性
案例
class Person2 { public: Person2(string name, int sex, int condition, Mediator *m) { m_name = name; m_sex = sex; m_condition = condition; m_m = m; } string getName() { return m_name; } int getSex() { return m_sex; } int getCondit() { return m_condition; } Mediator *getMediator() { return m_m; } public: virtual void getParter(Person2 *p) = 0; protected: string m_name; // int m_sex; //1男 2女 int m_condition; //123456789; Mediator *m_m; }; class Mediator { public: Mediator() { pMan = NULL; pWoman = NULL; } void setWoman(Person2 *p) { pWoman = p; } void setMan(Person2 *p) { pMan = p; } void getPartner() { if (pMan->getSex() == pWoman->getSex()) { cout << "。。。 " << endl; } if (pMan->getCondit() == pWoman->getCondit()) { cout << pMan->getName() << " 和 " << pWoman->getName() << "绝配" << endl; } else { cout << pMan->getName() << " 和 " << pWoman->getName() << "不配" << endl; } } protected: private: Person2 *pMan; Person2 *pWoman; }; class Woman2 : public Person2 { public: Woman2(string name, int sex, int condition, Mediator *m) : Person2(name, sex, condition, m) { ; } virtual void getParter(Person2 *p) { this->getMediator()->setWoman(this); this->getMediator()->setMan(p); this->getMediator()->getPartner(); } private: }; class Man2 : public Person2 { public: Man2(string name, int sex, int condition, Mediator *m) : Person2(name, sex, condition, m) { ; } virtual void getParter(Person2 *p) { this->getMediator()->setMan(this); this->getMediator()->setWoman(p); this->getMediator()->getPartner(); } private: }; void main1902() { Mediator *mediator = new Mediator; Woman2 *w1 = new Woman2("小芳", 2, 4, mediator); Man2 *m1 = new Man2("张三", 1, 3, mediator); Man2 *m2 = new Man2("李四", 1, 4, mediator); w1->getParter(m1); w1->getParter(m2); delete w1; delete m1; delete m2; delete mediator; } void main() { //main1901(); //问题的引出 main1902(); //用中介者模式 进行优化 system("pause"); }
相关文章推荐
- Javascript 模式实例 中介者模式
- javascript设计模式之中介者模式Mediator
- 深入理解JavaScript系列(36):设计模式之中介者模式详解
- 设计模式--中介者模式
- 中介者模式
- 一天一个设计模式(5):中介者模式
- 设计模式 行为模式 中介者模式 c语言 版本实现
- 设计模式学习笔记——中介者模式
- 中介者模式
- DesignPattern之Mediator
- 中介者模式(Mediator Pattern)
- 中介者模式lua实现
- 大话设计模式C++实现-第25章-中介者模式
- JAVA设计模式之 中介者模式【Mediator Pattern】
- [设计模式笔记]三. 行为型模式--19. Mediator模式(中介者)对象行为型模式(一)
- 设计模式之中介者模式
- 中介者模式
- 享元模式
- 解释器模式
- java中介者模式的例子