中介者模式
时间: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 }
- 设计模式专题(二十二) ——享元模式
- 设计模式专题(二十三) ——解释器模式
- Thinking in SQL系列之数据挖掘C4.5决策树算法
- 设计模式专题(二十四) ——访问者模式
- PHP实用功能——modern PHP读书笔记(一)
- ModernPHP读书笔记(二) ——PHP开发标准
- iBatis.Net(6):Data Map(深入)
- iBatis.Net(5):Data Map(了解)
- ModernPHP读书笔记(三)——PHP的良好实践
- PHP开发过程的那些坑(一) ——对象拷贝
- PHP开发过程的那些坑(二) ——PHP empty函数
- Thinking in SQL系列之数据挖掘Apriori关联分析再现啤酒尿布神话
- PHP开发过程的那些坑(三) ——PHParray_shift函数
- CSS3弹性盒布局
- 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 数组属性和方法
- python转化excel数字日期为标准日期操作
- thinkPHP框架通过Redis实现增删改查操作的方法详解
- PHP中引用类型和值类型功能与用法示例
- PHP文件上传小程序 适合初学者学习!
- php的扩展写法总结
- 实例介绍PHP删除数组中的重复元素
- Python迭代器协议及for循环工作机制详解
- PHP CURL中传递cookie的方法步骤
- PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
- Yii2处理密码加密及验证的方法
- PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
- python如何输出反斜杠
- 在Laravel5中正确设置文件权限的方法
- asp函数split()对应php函数explode()
- php获取目录下所有文件及目录(多种方法)(推荐)