设计模式(十六)-- 中介者模式
layout: post
title: 设计模式(十六)– 中介者模式
description: 设计模式(十六)– 中介者模式
categories:
- 设计模式
tags: - 设计模式
面向对象
中介者模式
1.概述
用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式
2.结构图
3.角色
Mediator(抽象中介者):它定义一个接口,该接口用于与各同事对象之间进行通信。
ConcreteMediator(具体中介者):它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事对象的引用。
Colleague(抽象同事类):它定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
ConcreteColleague(具体同事类):它是抽象同事类的子类;每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信;在具体同事类中实现了在抽象同事类中声明的抽象方法
4.C语言实现
#include <stdio.h>
// 抽象组件
typedef struct Component Component;
struct Component
{
void (*operation)(Component *);
};
// 具体组件
typedef struct ConcreteComponent ConcreteComponent;
struct ConcreteComponent
{
Component component;
};
// 中介者
typedef struct Mediator Mediator;
struct Mediator
{
void (*mediate)(Mediator *, Component *, Component *);
};
// 具体中介者
typedef struct ConcreteMediator ConcreteMediator;
struct ConcreteMediator
{
Mediator mediator;
ConcreteComponent *component1;
ConcreteComponent *component2;
};
// 组件操作
void componentOperation(Component *component)
{
printf("Component operation\n");
}
// 中介者操作
void mediate(Mediator *mediator, Component *component1, Component *component2)
{
ConcreteMediator *m = (ConcreteMediator *)mediator;
m->component1->component.operation(&(m->component1->component));
m->component2->component.operation(&(m->component2->component));
}
int main()
{
ConcreteComponent component1;
component1.component.operation = componentOperation;
ConcreteComponent component2;
component2.component.operation = componentOperation;
ConcreteMediator mediator;
mediator.mediator.mediate = mediate;
mediator.component1 = &component1;
mediator.component2 = &component2;
mediator.mediator.mediate(&mediator, &component1.component,
&component2.component);
return 0;
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 开心大佬
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果