博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型模型 中介者模式
阅读量:5328 次
发布时间:2019-06-14

本文共 2890 字,大约阅读时间需要 9 分钟。

行为型模型 中介者模式

 

 

Mediator抽象中介者

        中介者类的抽象父类。
concreteMediator
        具体的中介者类。
Colleague
        关联类的抽象父类。
concreteColleague
        具体的关联类。

适用于:

        用一个中介对象,封装一些列对象(同事)的交换,中介者是各个对象不需要显示的相互作用,从而实现了耦合松散,而且可以独立的改变他们之间的交换。

 

/** * 行为型模型 中介者模式 * Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种。 * Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。 * */#define _CRT_SECURE_NO_WARNINGS#include 
#include
#include
// 前置声明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;}

 

转载于:https://www.cnblogs.com/lsgxeva/p/7783073.html

你可能感兴趣的文章
ORM(Object Relation Mapping)
查看>>
进程和线程
查看>>
有没有让你相见恨晚的(高考)教辅书?
查看>>
BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】
查看>>
ios UIWebView 在开发中加载文件
查看>>
《大学之路》读后感(2)
查看>>
Spring Boot自定义配置与加载
查看>>
小微博1
查看>>
Ubuntu16.04安装MySQL+JDBC
查看>>
字符串游戏(strgame)——博弈
查看>>
企业邮箱服务优化软件
查看>>
归并排序
查看>>
Unix Family Tree
查看>>
linux 命令行更新sdk
查看>>
apache httpd.conf 参数详解
查看>>
Angular系列------AngularJS入门教程:导言和准备(转载)
查看>>
sql语句大全
查看>>
bat执行python脚本,执行多条命令
查看>>
JQuery事件
查看>>
hdu1254 推箱子(两种解法)
查看>>