C语言责任链模式是一种行为设计模式,它将请求的发送和接收方解耦,使得多个对象均有机会处理请求。责任链模式的主要思想是,将多个对象链接在一起,由对象之间组成一条链,依次处理请求。
下面是一个C语言责任链模式的示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node node_t;
struct node
{
int value;
node_t *next;
};
void print(node_t *node)
{
while (node != NULL)
{
printf("%d ", node->value);
node = node->next;
}
printf("\n");
}
void add(node_t **node, int value)
{
node_t *new_node = malloc(sizeof(node_t));
new_node->value = value;
new_node->next = *node;
*node = new_node;
}
void remove_node(node_t **node, int value)
{
node_t *previous_node = NULL;
node_t *current_node = *node;
while (current_node != NULL)
{
if (current_node->value == value)
{
if (previous_node == NULL)
{
*node = current_node->next;
}
else
{
previous_node->next = current_node->next;
}
free(current_node);
break;
}
previous_node = current_node;
current_node = current_node->next;
}
}
void destroy(node_t *node)
{
node_t *tmp = NULL;
while (node != NULL)
{
tmp = node;
node = node->next;
free(tmp);
}
}
int main()
{
node_t *list = NULL;
add(&list, 3);
add(&list, 2);
add(&list, 1);
add(&list, 0);
print(list);
remove_node(&list, 2);
print(list);
destroy(list);
return 0;
}
以上代码的主要思想是打印、添加和删除节点,链表可以链式调用方法以完成以上三个任务。
以下是一个使用责任链模式的示例,它演示了如何使用责任链模式实现一个简单的身份验证流程:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_USERNAME_LENGTH 20
#define MAX_PASSWORD_LENGTH 20
typedef struct user user_t;
typedef struct authenticator authenticator_t;
struct user
{
char username[MAX_USERNAME_LENGTH];
char password[MAX_PASSWORD_LENGTH];
};
struct authenticator
{
authenticator_t *next;
void (*handle_authentication)(user_t *);
};
void username_authentication(user_t *user)
{
printf("Username authentication...\n");
}
void password_authentication(user_t *user)
{
printf("Password authentication...\n");
}
void authentication(user_t *user, authenticator_t *authenticator)
{
if (authenticator == NULL)
{
printf("Authentication success!\n");
return;
}
authenticator->handle_authentication(user);
authentication(user, authenticator->next);
}
int main()
{
authenticator_t authenticator1 = {NULL, username_authentication};
authenticator_t authenticator2 = {&authenticator1, password_authentication};
user_t user = {"username", "password"};
authentication(&user, &authenticator2);
return 0;
}
以上代码定义了一个用户结构体和一个身份认证器结构体。身份认证器结构体包含一个指向下一个身份认证器的指针和一个处理身份验证的函数指针。authentication
函数使用责任链模式调用身份认证器链表上的所有身份认证器。如果所有身份认证器都通过了验证,则认证成功。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言责任链模式示例代码 - Python技术站