代理模式-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. 需要对目标对象进行保护,隐藏其具体实现细节。

相关推荐
笨手笨脚の1 天前
设计模式-代理模式
设计模式·代理模式·aop·动态代理·结构型设计模式
xxxxxxllllllshi4 天前
Java 代理模式深度解析:从静态到动态,从原理到实战
java·开发语言·笔记·算法·代理模式
1710orange5 天前
java设计模式:静态代理模式
java·设计模式·代理模式
Zz_waiting.7 天前
Spring AOP
java·spring·代理模式·springaop
Your易元7 天前
模式组合应用-代理模式
安全·系统安全·代理模式
敲代码的苦138 天前
【最新】2025年计算机软件著作权合作开发协议示例文件
程序人生·代理模式·学习方法·软件需求·格式工厂
奔跑吧邓邓子8 天前
【C++实战㊺】解锁C++代理模式:从理论到实战的深度剖析
c++·实战·代理模式
bkspiderx10 天前
C++设计模式之结构型模式:代理模式(Proxy)
c++·设计模式·代理模式
大飞pkz11 天前
【设计模式】代理模式
开发语言·设计模式·c#·代理模式
珹洺11 天前
Java-Spring入门指南(十一)代理模式与Spring AOP实战
java·spring·代理模式