代理模式-C语言实现

UML图:

代码实现:

复制代码
#include <stdio.h>

// 抽象主题接口
typedef struct {
    void (*request)(void*);
} Subject;

// 具体主题类
typedef struct {
    void (*request)(void*);
} RealSubject;

void RealSubject_request(void* obj) {
    printf("RealSubject: Handling request\n");
}

RealSubject createRealSubject() {
    RealSubject subject;
    subject.request = RealSubject_request;
    return subject;
}

// 代理类
typedef struct {
    RealSubject realSubject;
    void (*request)(void*);
} Proxy;

void Proxy_request(void* obj) {
    Proxy* proxy = (Proxy*)obj;
    printf("Proxy: Logging request\n");
    proxy->realSubject.request(&proxy->realSubject);
    printf("Proxy: Logging response\n");
}

Proxy createProxy() {
    Proxy proxy;
    proxy.realSubject = createRealSubject();
    proxy.request = Proxy_request;
    return proxy;
}

int main() {
    Proxy proxy = createProxy();
    proxy.request(&proxy);

    return 0;
}

在上面的示例代码中,首先定义了抽象主题接口Subject,其中包含了一个请求处理的函数指针。然后定义了具体主题类RealSubject,它实现了抽象主题接口中的函数。

接着定义了代理类Proxy,它包含了一个指向具体主题对象的引用,并实现了与具体主题相同的接口函数。

main函数中,创建了代理对象proxy,并通过代理对象来发起请求。

代理模式的优点:

  1. 可以实现对目标对象的访问控制,例如验证权限、监控访问等。

  2. 可以实现延迟加载,当真正需要时才创建或访问目标对象,提高系统性能。

  3. 可以隐藏目标对象的具体实现细节,保护目标对象的安全。

代理模式的缺点:

  1. 增加了系统复杂性,引入了额外的代理对象。

  2. 可能会降低系统的性能,特别是在需要频繁访问目标对象时。

适用场景:

  1. 需要对访问对象进行控制和管理,如权限验证、缓存等。

  2. 需要对目标对象进行扩展,例如增加额外的操作。

  3. 需要对目标对象进行保护,隐藏其具体实现细节。

相关推荐
范纹杉想快点毕业18 小时前
C语言编程实战宝典:550例精解·涵盖基础语法·数组指针·位运算·递归·贪心·动态规划
c语言·动态规划·代理模式
想不明白的过度思考者20 小时前
SpringAOP:Java 三大代理模式:从静态代理到 JDK & CGLIB 动态代理
java·开发语言·代理模式
※DX3906※3 天前
SpringBoot之旅5| 快速上手SpringAOP、深入刨析动态/静态两种代理模式
java·数据库·spring boot·后端·spring·java-ee·代理模式
无籽西瓜a3 天前
【西瓜带你学设计模式 | 第九期 - 代理模式】代理模式 —— 静态与动态代理实现、优缺点与适用场景
java·后端·设计模式·软件工程·代理模式
江畔何人初5 天前
iptables 和 IPVS 代理模式 Service 的区别
linux·运维·服务器·网络·云原生·kubernetes·代理模式
时代观察者8 天前
2026年瑞士TESA代理商盘点:行业前五强,谁在领跑精密测
代理模式
ab15151712 天前
3.24二刷基础134、135、129,完成进阶98、99
代理模式
MegaDataFlowers12 天前
静态/动态代理模式
java·开发语言·代理模式
砍光二叉树13 天前
【设计模式】结构型-代理模式
设计模式·系统安全·代理模式
ambition2024213 天前
动态规划解最长不下降子序列:深入理解状态转移与内层循环
代理模式