示例一
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| |
| |
| typedef struct subsystemA { |
| void (*operationA)(struct subsystemA* subsystem); |
| } SubsystemA; |
| |
| typedef struct subsystemB { |
| void (*operationB)(struct subsystemB* subsystem); |
| } SubsystemB; |
| |
| typedef struct subsystemC { |
| void (*operationC)(struct subsystemC* subsystem); |
| } SubsystemC; |
| |
| typedef struct facade { |
| SubsystemA subsystemA; |
| SubsystemB subsystemB; |
| SubsystemC subsystemC; |
| void (*operation)(struct facade* facade); |
| } Facade; |
| |
| void operationA(SubsystemA* subsystem) { |
| printf("SubsystemA operation.\n"); |
| } |
| |
| void operationB(SubsystemB* subsystem) { |
| printf("SubsystemB operation.\n"); |
| } |
| |
| void operationC(SubsystemC* subsystem) { |
| printf("SubsystemC operation.\n"); |
| } |
| |
| void operation(Facade* facade) { |
| facade->subsystemA.operationA(&facade->subsystemA); |
| facade->subsystemB.operationB(&facade->subsystemB); |
| facade->subsystemC.operationC(&facade->subsystemC); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| Facade facade; |
| facade.subsystemA.operationA = operationA; |
| facade.subsystemB.operationB = operationB; |
| facade.subsystemC.operationC = operationC; |
| facade.operation = operation; |
| facade.operation(&facade); |
| return 0; |
| } |
示例二
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| |
| typedef struct _Computer { |
| void ( *work )( void ); |
| } Computer; |
| void work( void ) |
| { |
| printf( "Computer work here!\n" ); |
| } |
| |
| typedef struct _Phone { |
| void ( *contact )( void ); |
| } Phone; |
| void contact( void ) |
| { |
| printf( "Phone contact here!\n" ); |
| } |
| |
| typedef struct _Factory { |
| Computer *computer; |
| Phone *phone; |
| void ( *create )( struct _Factory *factory ); |
| } Factory; |
| void create( Factory *factory ) |
| { |
| |
| factory->computer->work(); |
| factory->phone->contact(); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| Computer computer = { |
| .work = work, |
| }; |
| |
| Phone phone = { |
| .contact = contact, |
| }; |
| |
| Factory factory = { |
| .create = create, |
| .computer = &computer, |
| .phone = &phone, |
| }; |
| |
| factory.create( &factory ); |
| |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下