1. 程式人生 > >行為型模型 中介者模式

行為型模型 中介者模式

獨立 per com 行為模式 耦合 define 模型 warn gets

行為型模型 中介者模式

技術分享

Mediator抽象中介者
中介者類的抽象父類。
concreteMediator
具體的中介者類。
Colleague
關聯類的抽象父類。
concreteColleague
具體的關聯類。

適用於:
用一個中介對象,封裝一些列對象(同事)的交換,中介者是各個對象不需要顯示的相互作用,從而實現了耦合松散,而且可以獨立的改變他們之間的交換。

/**
 * 行為型模型 中介者模式
 * Mediator模式也叫中介者模式,是由GoF提出的23種軟件設計模式的一種。
 * Mediator模式是行為模式之一,在Mediator模式中,類之間的交互行為被統一放在Mediator的對象中,對象通過Mediator對象同其他對象交互,Mediator對象起著控制器的作用。
 *
 
*/ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <list> // 前置聲明 class Mediator; class Person { public: Person(std::string name, int sex, int condit, Mediator * mediator) { m_name = name; m_sex = sex; m_condit = condit; m_mediator
= mediator; } std::string getName() { return m_name; } int getSex() { return m_sex; } int getCondit() { return m_condit; } Mediator * getMediator() { return m_mediator; } virtual void getParter(Person *p) = 0;
virtual ~Person() {}; private: std::string m_name; int m_sex; int m_condit; Mediator * m_mediator; }; class Mediator { public: Mediator() { pMan = nullptr; pWoman = nullptr; } void setWoman(Person *p) { pWoman = p; } void setMan(Person *p) { pMan = p; } void getParter() { if (pMan->getSex() == pWoman->getSex() ) { std::cout << "No No No 我不是同性戀" << std::endl; } if (pMan->getCondit() == pWoman->getCondit()) { std::cout << pMan->getName() << "" << pWoman->getName() << " 絕配" << std::endl; } else { std::cout << pMan->getName() << "" << pWoman->getName() << " 不配" << std::endl; } } private: Person * pMan; Person * pWoman; }; class Man: public Person { public: Man(std::string name, int sex, int contid, Mediator * mediator): Person(name, sex, contid, mediator) { } virtual void getParter(Person *p) { this->getMediator()->setMan(this); this->getMediator()->setWoman(p); this->getMediator()->getParter(); } }; class Woman: public Person { public: Woman(std::string name, int sex, int contid, Mediator * mediator): Person(name, sex, contid, mediator) { } virtual void getParter(Person *p) { this->getMediator()->setMan(p); this->getMediator()->setWoman(this); this->getMediator()->getParter(); } }; void mytest() { Mediator * mediator = new Mediator(); Woman * w1 = new Woman("小芳", 2, 4, mediator); Man * m1 = new Man("張三", 1, 3, mediator); Man * m2 = new Man("李四", 1, 4, mediator); w1->getParter(m1); w1->getParter(m2); delete m1; m1 = nullptr; delete m2; m2 = nullptr; delete w1; w1 = nullptr; delete mediator; mediator = nullptr; return; } int main() { mytest(); system("pause"); return 0; }

行為型模型 中介者模式