C语言责任链模式示例代码

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技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • QT5 Thread线程的具体实现

    下面是关于QT5 Thread线程的具体实现的完整攻略。 1. 基本概念 Qt 中的线程是通过 QThread 类实现的,它提供了多个函数来操作线程,其中比较常用的包括: start() :启动线程并执行 run() 函数; quit() :通知线程退出; wait() :等待线程退出; terminate() :强制终止线程。 为了自定义线程类,我们需要继…

    C 2023年5月22日
    00
  • swift4更新中所遇到的一些问题总结

    Swift4更新中所遇到的一些问题总结 在使用Swift进行开发过程中,我们经常会遇到各种问题。随着Swift4的推出,其中也包含了许多新的变化,这篇文章将会总结一些在Swift4更新中所遇到的问题,并提供一些解决的方法。下面将笔者所遇到的问题以及解决方法列举出来,供大家参考。 Xcode9.3升级后无法使用Alamofire 在Xcode9.3升级后,许多…

    C 2023年5月23日
    00
  • C语言实现静态存储通讯录的示例代码

    下面是详细的“C语言实现静态存储通讯录的示例代码”的攻略: 一、准备工作 1. 安装开发环境 首先需要安装C语言开发环境,推荐使用Code::Blocks,可以在官网https://www.codeblocks.org/上进行下载和安装。 2. 创建项目 在Code::Blocks中,选择File->New->Project,选择“Console…

    C 2023年5月24日
    00
  • python模块与C和C++动态库相互调用实现过程示例

    题目要求详细解释“python模块与C和C++动态库相互调用实现过程示例”的攻略。下面是详细的解释: 什么是Python模块? 在Python中,模块是指一个包含Python代码的文件。模块可以按功能分割成不同的文件,而不需要担心Python代码文件太大的问题。Python模块可以向Python程序中添加可重用的功能。因此,模块是组织和重用Python代码的…

    C 2023年5月23日
    00
  • C语言实现ATM自动取款机系统的示例代码

    本文将详细讲解如何使用C语言实现一个ATM自动取款机系统,包括如何进行账户验证、显示余额、进行取款、修改密码等功能。我们将通过一个示例代码来展示实现的过程。下面是完整攻略: 第一步:创建用户结构体 我们需要用一个结构体来表示存储在数据库中的用户信息,包含账户名、密码、余额等属性。以下是一个用户结构体的示例代码: struct user { char user…

    C 2023年5月23日
    00
  • C语言实现简单班级成绩管理系统

    C语言实现简单班级成绩管理系统 本文将详细讲解如何使用C语言实现班级成绩管理系统,包括创建数据结构、实现各种功能以及存储数据等。下面将详细介绍具体的步骤。 步骤一:创建数据结构 首先,要创建一个数据结构来存储学生的信息。这个数据结构应该包含以下信息: 学生ID 学生姓名 数学成绩 语文成绩 英语成绩 平均分 例如,可以使用以下代码来创建这个数据结构: str…

    C 2023年5月23日
    00
  • Python常见读写文件操作实例总结【文本、json、csv、pdf等】

    Python常见读写文件操作实例总结 本文将介绍在Python中针对常见文件类型的读写操作,包括文本、JSON、CSV以及PDF等格式。 文本文件读写 读取文本文件 读取文本文件很简单,可以使用Python内置的open()函数来打开文件,然后读取文件的内容。open()函数接收两个参数,第一个参数是要读取的文件的路径,第二个参数是打开文件的模式,我们这里使…

    C 2023年5月23日
    00
  • C语言中的分支循环其嵌套语句

    C语言中的分支循环语句是控制程序流程的重要工具,它们可以根据条件来执行不同的代码块,或者循环执行某段代码块。与此同时,C语言还支持分支循环语句的嵌套,这种语句结构可以更精细地控制程序流程,提高代码的效率和可维护性。下面是完整的攻略。 分支语句 if语句 if语句是最基本的分支语句,用来测试一个条件,如果满足条件就执行指定的代码块。 语法: if (条件) {…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部