代理模式(大话设计模式)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();
}
相关推荐
!停18 小时前
函数递归的应用
c语言
7***n7519 小时前
前端设计模式详解
前端·设计模式·状态模式
兵bing19 小时前
设计模式-装饰器模式
设计模式·装饰器模式
feng_you_ying_li20 小时前
Detailed explanation of being processing
c语言
玖剹20 小时前
递归练习题(四)
c语言·数据结构·c++·算法·leetcode·深度优先·深度优先遍历
雨中飘荡的记忆21 小时前
深入理解设计模式之适配器模式
java·设计模式
雨中飘荡的记忆21 小时前
深入理解设计模式之装饰者模式
java·设计模式
老鼠只爱大米1 天前
Java设计模式之外观模式(Facade)详解
java·设计模式·外观模式·facade·java设计模式
qq_172805591 天前
Go 语言结构型设计模式深度解析
开发语言·设计模式·golang
序属秋秋秋1 天前
《Linux系统编程之进程环境》【环境变量】
linux·运维·服务器·c语言·c++·操作系统·系统编程