生活随笔
收集整理的這篇文章主要介紹了
23种设计模式C++源码与UML实现--中介者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
中介者模式
Mediator模式也叫做中介者模式,是行為模式之一,在Mediator模式中,類之間的交互行為被統一放在Mediator的對象中,對象通過Mediator對象同其他對象交互,Mediator對象起著控制器的作用。
用一個中介者對象來封裝一系列的對象交互,中介者使各對象不需要顯示的相互引用,從而降低耦合,而且可以獨立地改變它們之間的交互。
Mediator抽象中介者
中介者類的抽象父類
ConcreteMediator
具體的中介者類
Colleague
關聯類的抽象父類
concreteColluague
具體的關聯類
適用于:用一個中介對象,封裝一些列對象的交換,中介者是各個對象不需要顯示的相互作用,從而實現耦合松散,而且可以獨立的改變它們之間的交換。
模式優點
將系統按功能分割成更小的對象,符合類的最小設計原則對關聯對象的集中控制嬌小類的耦合程度,明確類之間的相互關系:當類之間的關系過于復雜時,其中任何一個類的修改都會影響到其他類,不符合類的設計的開閉原則,而mediator模式將原來相互依存的多對多的類之間的關系簡化為Mediator控制類與其他關聯類的一對多的關系,當其中一個類修改時,可以對其他關聯類不產生影響(即使有修改,也集中在Mediator控制類)有利于提高類的重用性
#include <iostream>using namespace std
;class Mediator;class Person {
public:Person(string name
, int sex
, int condi
, Mediator
*m
) {m_name
= name
;m_sex
= sex
;m_condi
= condi
;mediator
= m
;}virtual ~Person() = default;string
getName() {return m_name
;}int getSex() const {return m_sex
;}int getCondi() const {return m_condi
;}virtual void getParter(Person
*p
) = 0;protected:string m_name
;int m_sex
;int m_condi
;Mediator
*mediator
;
};class Mediator {
public:virtual ~Mediator() = default;void setMan(Person
*man
) {pMan
= man
;}void setWoman(Person
*woman
) {pWoman
= woman
;}virtual void getParter() {if (pWoman
->getSex() == pMan
->getSex()) {cout
<< "性別相同不能找對象" << endl
;}if (pWoman
->getCondi() == pMan
->getCondi()) {cout
<< pWoman
->getName() << " and " << pMan
->getName() << " OK" << endl
;} else {cout
<< pWoman
->getName() << " and " << pMan
->getName() << " failed" << endl
;}}private:Person
*pMan
;Person
*pWoman
;
};class Woman : public Person
{
public:Woman(string name
, int sex
, int condi
, Mediator
*m
) : Person(name
, sex
, condi
, m
) {}virtual void getParter(Person
*p
) {mediator
->setMan(p
);mediator
->setWoman(this);mediator
->getParter(); }
};class Man : public Person
{
public:Man(string name
, int sex
, int condi
, Mediator
*m
) : Person(name
, sex
, condi
, m
) {}virtual void getParter(Person
*p
) {mediator
->setMan(this);mediator
->setWoman(p
);mediator
->getParter();}
};int main(int argc
, char *argv
[]) {auto *m
= new Mediator
;Person
*alice
= new Woman("alice", 2, 4, m
);Person
*bob
= new Man("bob", 1, 4, m
);alice
->getParter(bob
);bob
->getParter(alice
);delete bob
;delete alice
;delete m
;cout
<< "mediator demo" << endl
;return 0;
}
總結
以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。