中介者模式
时间:2022-04-26
本文章向大家介绍中介者模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、简介
1、中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的交互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
2、成员类
Mediator:中介者接口。在里面定义了各个同事之间相互交互所需要的方法。
ConcreteMediator:具体的中介者实现对象。它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。
Colleague:同事类的定义,通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能。
ConcreteColleague:具体的同事类,实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。
3、UML
4、所属类别:行为型
二、C++程序
1 // 中介者模式.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include<iostream>
6 #include<string>
7 using namespace std;
8 class Colleage
9 {
10 public:
11 Colleage(){}
12 virtual~Colleage(){}
13 };
14 class Mediator
15 {
16 public:
17 Mediator(){}
18 virtual ~Mediator(){}
19 virtual void declare(string ,Colleage *)=0;
20 };
21
22 class Concretecolleage1:public Colleage
23 {
24 private:
25 Mediator *mediator;
26 public:
27 Concretecolleage1(Mediator * m)
28 {
29 mediator=m;
30 }
31 virtual~Concretecolleage1(){}
32 void talk(string s)
33 {
34 mediator->declare(s,this);
35 }
36 void receive(string s)
37 {
38 cout<<"Concretecolleage1接收到对方的消息:"<<s<<endl;
39 }
40 };
41 class Concretecolleage2:public Colleage
42 {
43 private:
44 Mediator *mediator;
45 public:
46 Concretecolleage2(Mediator * m)
47 {
48 mediator=m;
49 }
50 virtual~Concretecolleage2(){}
51 void talk(string s)
52 {
53 mediator->declare(s,this);
54 }
55 void receive(string s)
56 {
57 cout<<"Concretecolleage2接收到对方的消息:"<<s<<endl;
58 }
59 };
60 class Concretemediator:public Mediator
61 {
62 private:
63 Concretecolleage1 *concretecolleage1;
64 Concretecolleage2 *concretecolleage2;
65 public:
66 Concretemediator(){}
67 virtual ~Concretemediator(){}
68 void setConcretecolleage1(Concretecolleage1 * value)
69 {
70 concretecolleage1=value;
71 }
72 void setConcretecolleage2(Concretecolleage2 * value)
73 {
74 concretecolleage2=value;
75 }
76 virtual void declare(string s,Colleage * m)
77 {
78 if(m==concretecolleage1)
79 {
80 concretecolleage2->receive(s);
81 }
82
83 if(m==concretecolleage2)
84 {
85 concretecolleage1->receive(s);
86 }
87 }
88 };
89
90
91 int _tmain(int argc, _TCHAR* argv[])
92 {
93 //设置两个要通信的人和一个中介者
94 Concretemediator *phone=new Concretemediator();
95 Concretecolleage1 * xie=new Concretecolleage1(phone);
96 Concretecolleage2 * lala=new Concretecolleage2(phone);
97 phone->setConcretecolleage1(xie);
98 phone->setConcretecolleage2(lala);
99 xie->talk("去吃饭吧?");
100 lala->talk("好的呀,马上就走");
101 return 0;
102 }
- P3388 【模板】割点(割顶)
- python爬取链家租房之获取房屋的链接和页面的详细信息
- 信用卡“坏账”客户分析(一)
- 一道简单的sql语句题
- python爬虫反爬取---设置User Agent自动变换header文件
- 一文读懂Python多线程
- 深入理解Python变量作用域与函数闭包
- TensorFlow从1到2 - 5 - 非专家莫入!TensorFlow实现CNN
- JetBrains Rider 破解 (ideaIU等等开发工具都通用)
- python中的小魔法(一)
- 由问题入手,步步爬出Python中赋值与拷贝的坑
- python爬取链家租房之获得每一页的房屋信息地址(持续更新)
- python使用正则表达式
- python在租房过程中的应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring JPA 查询
- 初学者指南:利用SVD创建推荐系统
- 聊一聊面试中经常被问到的Tree Shaking
- 「Workshop」第十四期:线性回归
- 评价生成器
- 【Vulnhub】Tr0ll:2
- 看到一个不错的前端面试题开源项目
- PWN:UnsortedBin Attack
- React、TypeScript、NodeJS 和 MongoDB 搭建 Todo App
- 我想new个对象过七夕,她却抛了异常···
- 在开启了CloudFlare的页面中显示当前节点信息
- MySQL 案例:无主键表引发的同步延迟
- 进入编译器后,一个函数经历了什么?
- Cloudflare中firewall的编写方法
- LeetCode 11盛水最多的容器&12整数转罗马数字