松垮垮 松垮垮
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

松垮垮

c++后端开发工程师
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式

    • Adapter(适配器模式、包装模式)
    • Bridge桥接模式
    • Builder建造者模式
    • Chain
    • Command命令模式
    • Composite组合模式
    • Decorator装饰者
    • Façade门面模式(外观模式)
    • Flyweight享元模式
    • Interpreter解释器模式
    • Iterator迭代器
    • Mediator中介者模式(仲裁者模式)
    • Memento备忘录模式
    • Observer观察者模式
    • Prototype原型
    • Proxy代理模式
    • Singleton单例模式
    • State状态模式
    • Strategy战略
    • Template
    • Visitor访问者模式
    • •Abstract
    • •Factory
    • 依赖注入(控制反转IoC)
    • 概论
    • 设计模式
  • 工具和开发
  • 设计模式
songkuakua
2025-02-15

Mediator中介者模式(仲裁者模式)

# Mediator中介者模式(仲裁者模式)

Owner: -QVQ-

行为型的软件设计模式

如果有10个租客,5个房东,他们各自单线联系,那么他们之间的交流会相对混乱。此时出现了一个房产中介,由中介安排合适的租客和房东交流

优点:

  1. 解耦。中介的存在使得同事对象间的强耦合关系解除,它们可以独立地变化而不会影响到整体,便于被复用。
  2. 良好扩展性。交互行为发生改变,只需要扩展中介即可。
  3. 集中交互,便于管理。

缺点:

  1. 中介者的职责很重要,且复杂。 Untitled
// 抽象类-人
class Person
{
public:
	// 构造函数
	Person(Mediator* mediator) : m_mediator(mediator) {}
 
	// 发出消息
	virtual void sendMessage(std::string message) = 0;
 
	// 获取消息
	virtual void getMessage(std::string message) = 0;
 
protected:
	Mediator* m_mediator;
};
 
// 具体类-租客
class Tenant : public Person
{
public:
	// 构造函数
	Tenant(Mediator* mediator) : Person(mediator) {}
 
	// 发出消息
	virtual void sendMessage(std::string message) {
		m_mediator->sendMessage(message, this);
	}
 
	// 获取消息
	virtual void getMessage(std::string message) {
		std::cout << "租客得到消息:" << message << std::endl;
	}
};
 
// 具体类-房东
class Landlord : public Person 
{
public:
	// 构造函数
	Landlord(Mediator* mediator) : Person(mediator) {}
 
	// 发出消息
	virtual void sendMessage(std::string message) {
		m_mediator->sendMessage(message, this);
	}
 
	// 获取消息
	virtual void getMessage(std::string message) {
		std::cout << "房东得到消息:" << message << std::endl;
	}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 抽象中介者
class Mediator 
{
public:
	// 发出信息
	virtual void sendMessage(std::string message, Person* colleague) = 0;
 
};
 // 具体中介者-房产中介
class RealEstateMediator : public Mediator
{
public:
	// 设置租客
	void setTenant(Person* tenant) {
		m_tenant = tenant;
	}
 
	// 设置房东
	void setLandlord(Person* landlord) {
		m_landlord = landlord;
	}
 
	// 发出信息
	virtual void sendMessage(std::string message, Person* colleague) {
		if (colleague == m_tenant) {
			m_landlord->getMessage(message);
		}
		else {
			m_tenant->getMessage(message);
		}
	}
 
private:
	Person* m_tenant;
	Person* m_landlord;
 
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

主函数

// 创建对象
	RealEstateMediator *mediator = new RealEstateMediator();
	Person *tenant = new Tenant(mediator);
	Person *landlord = new Landlord(mediator);
 
	// 中介设置房东和租客
	mediator->setTenant(tenant);
	mediator->setLandlord(landlord);
 
	// 进行租房询问
	tenant->sendMessage("房租多少钱?");
	landlord->sendMessage("房租3000元。");
1
2
3
4
5
6
7
8
9
10
11
12

先创建中介,关联中介和通信双方,通信双方也关联中介,然后通过中介实现通信双方的操作

上次更新: 2025/02/21, 14:57:10
Iterator迭代器
Memento备忘录模式

← Iterator迭代器 Memento备忘录模式→

最近更新
01
搭建ai知识助手
02-23
02
边缘检测
02-15
03
css
02-15
更多文章>
Theme by Vdoing | Copyright © 2025-2025 松垮垮 | MIT License | 蜀ICP备2025120453号 | 川公网安备51011202000997号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 纯净模式