嵌入式C编程中的设计模式之一——单件模式和策略模式(转载)

参考转载

嵌入式C编程中的设计模式之一——单件模式和策略模式

观察者模式

#include <stdio.h>

// 定义观察者接口
typedef struct {
    void (*update)(int); // 更新通知的函数指针
} Observer;

// 定义被观察者类
typedef struct {
    int data; // 数据
    Observer* observers[5]; // 最多支持5个观察者
    int numObservers; // 观察者数量
} Subject;

// 初始化被观察者对象
void initSubject(Subject* subject) {
    subject->data = 0;
    subject->numObservers = 0;
}

// 注册观察者
void attachObserver(Subject* subject, Observer* observer) {
    if (subject->numObservers < 5) {
        subject->observers[subject->numObservers++] = observer;
    } else {
        printf("Cannot attach more observers\n");
    }
}

// 通知所有观察者
void notifyObservers(Subject* subject) {
    for (int i = 0; i < subject->numObservers; ++i) {
        subject->observers[i]->update(subject->data);
    }
}

// 设置数据并通知观察者
void setData(Subject* subject, int data) {
    subject->data = data;
    notifyObservers(subject);
}

// 创建观察者对象
Observer observer1 = {
    .update = [](int data) {
        printf("Observer 1: Data updated to %d\n", data);
    }
};

Observer observer2 = {
    .update = [](int data) {
        printf("Observer 2: Data updated to %d\n", data);
    }
};

int main() {
    // 创建被观察者对象
    Subject subject;
    initSubject(&subject);

    // 注册观察者
    attachObserver(&subject, &observer1);
    attachObserver(&subject, &observer2);

    // 设置数据并通知观察者
    setData(&subject, 10);

    return 0;
}

在这个示例中,我们定义了一个Observer结构体,用来表示观察者的接口,其中包含了一个update函数指针,用来更新通知。然后,我们定义了一个Subject结构体,用来表示被观察者对象,其中包含了数据和观察者数组。我们实现了一些函数来初始化被观察者对象、注册观察者、通知观察者以及设置数据并通知观察者。最后,我们创建了两个观察者对象observer1和observer2,并将它们注册到被观察者对象中。在main函数中,我们创建了被观察者对象并注册了观察者,然后设置了数据并通知观察者。当数据更新时,观察者对象将收到通知并执行相应的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值