# observer-mode **Repository Path**: backsoon0/observer-mode ## Basic Information - **Project Name**: observer-mode - **Description**: 一个简单的观察者模式代码 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-09 - **Last Updated**: 2025-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 观察者模式 这里是一个简简单单的观察者模式模板,观察者订阅某一个主题,当这个主题发生变化时,会通知所有观察者。 即: 1. 观察者订阅主题 2. 主题接收消息 3. 主题通知观察者 ## 快速入门 1. 新建并初始化若干个主题,如: ```c Subject delay1000ms; Subject delay500ms; Subject_init(&delay1000ms, NOTIFY_MODE_ASYNC); Subject_init(&delay500ms, NOTIFY_MODE_ASYNC); ``` 主题有2种模式,一种是异步通知模式,即当主题接收到消息时不会立刻进行通知,通过调用`Subject_notify()`函数来进行通知; 另一种是同步通知模式,即当主题接收到消息时立刻进行通知,无需调用`Subject_notify()`函数。 2. 新建并初始化若干个观察者,如: ```c Observer delay1; Observer delay2; Observer delay3; Observer delay4; Observer_init(&delay1, 1, observer_callback1); Observer_init(&delay2, 2, observer_callback2); Observer_init(&delay3, 3, observer_callback3); Observer_init(&delay4, 4, observer_callback4); ``` 3. 将观察者订阅相应的主题 ```c Subject_add(&delay1000ms, &delay1); Subject_add(&delay1000ms, &delay2); Subject_add(&delay500ms, &delay3); Subject_add(&delay500ms, &delay4); ``` 4. 当主题获得对应消息时,根据设置来通知观察者(下面为异步模式时的例子) ```c if (clock() - start_time1 >= 1000) { Subject_setState(&delay1000ms); start_time1 = clock(); } if (clock() - start_time2 >= 500) { Subject_setState(&delay500ms); start_time2 = clock(); } Subject_notify(&delay1000ms); Subject_notify(&delay500ms); ```