用c语言写一个责任链模式
时间: 2023-02-28 15:31:59 浏览: 57
责任链模式是一种行为设计模式,其中一条链上的多个对象都有机会处理请求,直到请求被处理或者链上的所有对象都无法处理请求。
在 C 语言中,你可以使用结构体和链表来实现责任链模式。
以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct handler_t {
int level;
struct handler_t *next;
void (*handle_request)(struct handler_t *handler, int request);
} handler_t;
void handle_request(handler_t *handler, int request) {
if (handler->level >= request) {
printf("Handler %d handled request %d\n", handler->level, request);
} else if (handler->next != NULL) {
handler->next->handle_request(handler->next, request);
} else {
printf("Request %d was not handled\n", request);
}
}
int main() {
handler_t *h1 = (handler_t *)malloc(sizeof(handler_t));
h1->level = 1;
h1->next = NULL;
h1->handle_request = handle_request;
handler_t *h2 = (handler_t *)malloc(sizeof(handler_t));
h2->level = 2;
h2->next = h1;
h2->handle_request = handle_request;
handler_t *h3 = (handler_t *)malloc(sizeof(handler_t));
h3->level = 3;
h3->next = h2;
h3->handle_request = handle_request;
h3->handle_request(h3, 2);
h3->handle_request(h3, 3);
h3->handle_request(h3, 4);
return 0;
}
```
在这段代码中,`handler_t` 结构体表示处理请求的对象,其中 `level` 表示对象的处理级别,`next` 表示下一个对象,`handle_request` 是一个函数指针,用于处理请求。
在 `main` 函数