中介者模式


前言

提示:这里可以添加本文要记录的大概内容:

中介者模式(Mediator Pattern)是一种行为型设计模式,用于降低多个对象之间的耦合度。它通过引入一个中介者对象,将对象间的交互转移到中介者上,从而使对象之间不直接相互通信,而是通过中介者进行通信。


下面是一个简单的示例代码来说明如何在C语言程序设计中实现中介者模式:

typedef struct Mediator Mediator;	// 声明中介者结构体
typedef struct Colleague Colleague;	// 声明同事结构体

// 中介者结构体
struct Mediator 
{
    void (*sendMessage)(Colleague* colleague, const char* message);
};

// 同事结构体
struct Colleague 
{
    char name[20];
    Mediator* mediator;
};

// 中介者发送消息的函数实现
void sendMessage(Colleague* colleague, const char* message) 
{
    printf("%s 发送了消息: %s\n", colleague->name, message);
}

int main(void)
{
	bsp_Init();
	

    // 创建中介者对象
    Mediator mediator;
    mediator.sendMessage = sendMessage;
	
    // 创建同事对象并设置中介者
    Colleague colleague1, colleague2;
    
    sprintf(colleague1.name, "同事1");
    colleague1.mediator = &mediator;
    
    sprintf(colleague2.name, "同事2");
    colleague2.mediator = &mediator;
	
    // 同事之间通过中介者发送消息
    colleague1.mediator->sendMessage(&colleague1, "你好!");
    colleague2.mediator->sendMessage(&colleague2, "Hello!");
}

在这里插入图片描述

中介者模式通常在以下情况下使用:

当一组对象之间存在复杂的相互依赖关系时,通过引入一个中介者对象来简化对象间的通信。

当对象之间的交互逻辑分散在多个对象中,难以维护和扩展时,可以引入中介者模式来集中管理和协调这些交互。

在嵌入式软件开发中,中介者模式的应用相对较少,因为嵌入式系统通常需要高效地处理实时任务和资源限制。但在某些复杂的嵌入式系统中,可能存在多个对象之间的复杂通信和相互依赖,此时中介者模式可以被采用来优化系统的设计。

例如,在一个嵌入式系统中,可能存在多个传感器、执行器和控制器等设备,它们需要进行实时的数据交换和协调。使用中介者模式可以将这些设备间的通信逻辑集中在一个中介者对象中,从而简化设备之间的耦合关系,并提供一个可扩展和可维护的架构。

总之,尽管在嵌入式软件开发中中介者模式的使用相对较少,但在特定的复杂情况下,它仍然可以是一种有用的设计模式。在实际应用中,根据具体的需求和系统设计,选择合适的设计模式是很重要的。

以下是一个简单的使用中介者模式的嵌入式系统示例(使用C语言):

typedef struct 
{
    int id;
    int value;
    // 其他属性
} Device;

typedef struct
{
    Device* devices;
    int numDevices;
    // 其他属性
} Mediator;

void sendMessage(Mediator* mediator, Device* sender, int value) 
{
    printf("设备 %d 发送消息:%d\n", sender->id, value);
    // 处理与设备相关的逻辑
    // ...

    // 向其他设备发送消息
    for (int i = 0; i < mediator->numDevices; i++) 
	{
		if (mediator->devices[i].id != sender->id) 
		{
            // 处理与其他设备的交互逻辑
            printf("中介者转发消息给设备 %d\n", mediator->devices[i].id);
            // ...
        }
    }
}

int main(void)
{
	bsp_Init();
	

    Device device1 = {1, 0};
    Device device2 = {2, 0};
    Device device3 = {3, 0};

    Device devices[] = {device1, device2, device3};
    Mediator mediator = {devices, sizeof(devices) / sizeof(devices[0])};

    sendMessage(&mediator, &device1, 10);
	printf("====================================\n");
    sendMessage(&mediator, &device2, 20);
}

在这里插入图片描述

在以上示例中,我们定义了一个嵌入式系统的中介者对象 mediator 和三个设备对象 device1、device2、device3。每个设备都有一个唯一的标识符 id 和一个值 value。

当设备向中介者发送消息时,中介者将处理与设备相关的逻辑,并将消息转发给其他设备。在示例中,我们通过一个简单的循环遍历来模拟消息的转发过程。

请注意,这只是一个简化的示例,实际系统中可能会涉及更复杂的设备间通信和交互逻辑。但这个示例展示了如何使用中介者模式来简化嵌入式系统中设备间的通信和协调。

其他参考:
中介者设计模式详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值