代理模式(大话设计模式)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();
}
相关推荐
m0_748229991 小时前
帝国CMS后台搭建全攻略
java·c语言·开发语言·学习
你怎么知道我是队长2 小时前
C语言---排序算法4---希尔排序法
c语言·算法·排序算法
m0_748229992 小时前
C与C#:编程语言的核心差异解析
c语言·开发语言·c#
进击的小头2 小时前
一阶IIR低通滤波器:从原理到嵌入式实战
c语言·算法
wotaifuzao2 小时前
STM32+FreeRTOS 长期可维护架构设计(事件驱动篇)-- 告别“屎山”代码
c语言·stm32·嵌入式硬件·freertos·状态机·事件驱动·嵌入式架构
m0_748229992 小时前
Laravel7.x核心特性全解析
c语言·数据库·c#
kklovecode2 小时前
C++对C语言的增强
c语言·开发语言·c++
m0_748248653 小时前
C语言向C++过渡
c语言·c++·算法
leaves falling3 小时前
c语言-函数讲解
c语言·开发语言
娟宝宝萌萌哒4 小时前
智能体设计模式重点
人工智能·设计模式