代理模式(大话设计模式)C/C++版本

代理模式

C++

cpp 复制代码
#include <iostream>
using namespace std;

class Subject // Subject 定义了RealSubject和Proxy的共用接口..这样就在任何使用RealSubject的地方都可以使用Proxy
{
public:
    virtual void func()
    {
        cout << "Subject" << endl;
    }
};

class RealSubject : public Subject // RealSubject  定义proxy所代表的真实实体
{
public:
    virtual void func()
    {
        cout << "RealSubject" << endl;
    }
};

class Proxy : public Subject // proxy 保存一个引用使得代理可以访问实体,并且提供一个于Subject的接口相同的接口 这样代理就可以用来替代实体
{
    RealSubject real;

public:
    virtual void func()
    {
        cout << "Proxy" << endl;
        real.func();
    }
};

int main()
{
    Proxy proxy;
    proxy.func();
    return 0;
}

C

c 复制代码
#include <stdio.h>

typedef void (*FuncPtr)(void);

typedef struct
{
    FuncPtr func;
} Subject;

typedef struct
{
    Subject subject;
} RealSubject;

void RealSubject_init(RealSubject *self);
void RealSubject_func(void);

typedef struct
{
    Subject subject;
    RealSubject real;
} Proxy;

void Proxy_init(Proxy *self);
void Proxy_func(Proxy *self);

int main()
{
    Proxy proxy;
    Proxy_init(&proxy);
    proxy.subject.func();
    return 0;
}

void RealSubject_init(RealSubject *self)
{
    self->subject.func = RealSubject_func;
}

void RealSubject_func(void)
{
    printf("RealSubject\n");
}

void Proxy_init(Proxy *self)
{
    RealSubject_init(&self->real);
    self->subject.func = (FuncPtr)Proxy_func;
}

void Proxy_func(Proxy *self)
{
    printf("Proxy\n");
    self->real.subject.func();
}
相关推荐
CaffeinePro1 小时前
什么是系统架构?架构师到底在做什么?
设计模式·架构
文祐2 小时前
C语言用双向链表实现单调递减(递增)队列
c语言·开发语言·链表
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
gugucoding3 小时前
28. 【C语言】通用数据操作:`void *` 与类型无关编程
c语言·开发语言
凉、介4 小时前
ARMv8 架构下的刷 Cache 操作
c语言·笔记·学习·架构·嵌入式·arm
前端百草阁5 小时前
JavaScript 设计模式(23 种)
开发语言·前端·javascript·设计模式
geovindu5 小时前
java: Singleton Pattern
java·开发语言·后端·单例模式·设计模式·创建型模式
灯厂码农19 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
geovindu19 小时前
python: Functional Options Pattern
开发语言·后端·python·设计模式·惯用法模式·函数式选项模式
wuyk55519 小时前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机