c语言编写访问者模式

2024-06-16 02:32
文章标签 语言 模式 编写 访问者

本文主要是介绍c语言编写访问者模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/* Note:Your choice is C IDE */
/*****************
访问者模式设计程序
这个模式设计程序的优点在后期代码维护比较简单,不需要知道代码实现的过程
即可完成想要的功能,详细的功能介绍可以百度获取


使用方法,看main介绍


c没有继承的属性 所以我们自己模拟编译器编写继承属性
添加函数块方法




重写下面代码即可
可参考 Fall的写法










************************/


#include "stdio.h"




/********声明*************/


typedef struct _Who_say
{
void (*man)();
void (*woman)();
}Who_say;
void person_say(Who_say *v);


typedef struct 
{
void (*Say)(Who_say *v);
}person;


//************person**************


void person_say(Who_say *v)
{
printf("i'am person\n");
}
void person_init(person *p)
{
p->Say = person_say;
}




//************man**************
void Man_Say(Who_say *v)
{
v->man();
}


typedef struct
{
void (*Man_Say)(Who_say *v);
}man;


void man_init(man *m,person *p)
{
m->Man_Say = Man_Say;
p->Say = m->Man_Say;
}


//***********woman***************
void Woman_Say(Who_say *v)
{
v->woman();
}


typedef struct
{
void (*Woman_Say)(Who_say *v);
}woman;


void woman_init(woman *m,person *p)
{
m->Woman_Say = Woman_Say;
p->Say = m->Woman_Say;
}
//**************success************
typedef struct
{
struct _Who_say ws;


}success;
void man_success()
{
printf("i'am man_success\n");
}
void woman_success()
{
printf("i'am woman_success\n");
}


void success_init(success *v)
{
v->ws.man = man_success;
v->ws.woman = woman_success;
}
//************Fall**************
typedef struct
{
struct _Who_say ws;
}Fall;
void man_fall()
{
printf("i'am man_fall\n");
}
void woman_fall()
{
printf("i'am woman_fall\n");
}


void Fall_init(Fall *v)
{
v->ws.man = man_fall;
v->ws.woman = woman_fall;
}
//**************************


void main()
{
    person p1,p2;//申请两个人的函数
    man m;//实例化男人
    woman wo;//实例化女人
    success su;
    Fall fa;//重写代码 只是把sucees的函数复制一次
    man_init(&m,&p1);//模拟高级语言编译
    woman_init(&wo,&p2);
    Fall_init(&fa);//模拟高级语言编译
    success_init(&su);
    p1.Say(&su);   //p1指向男人  执行su(成功命名)只会输出man_success的执行结果
    p1.Say(&fa);
    p2.Say(&su);   
    p2.Say(&fa);
    


}

这篇关于c语言编写访问者模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065258

相关文章

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用