代理模式(大话设计模式)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();
}
相关推荐
茶猫_4 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
ö Constancy5 小时前
Linux 使用gdb调试core文件
linux·c语言·vim
lb36363636365 小时前
介绍一下strncmp(c基础)
c语言·知识点
wellnw5 小时前
[linux] linux c实现共享内存读写操作
linux·c语言
小白不太白9506 小时前
设计模式之 模板方法模式
java·设计模式·模板方法模式
色空大师6 小时前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)6 小时前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
博风7 小时前
设计模式:6、装饰模式(包装器)
设计模式
A_cot7 小时前
理解设计模式与 UML 类图:构建稳健软件架构的基石
microsoft·设计模式·简单工厂模式·工厂方法模式·uml
君败红颜7 小时前
设计模式之创建模式篇
设计模式