代理模式
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d644106c2c2d4f0e906f01606a6f972a.png)
C++
#include <iostream>
using namespace std;
class Subject
{
public:
virtual void func()
{
cout << "Subject" << endl;
}
};
class RealSubject : public Subject
{
public:
virtual void func()
{
cout << "RealSubject" << endl;
}
};
class Proxy : public Subject
{
RealSubject real;
public:
virtual void func()
{
cout << "Proxy" << endl;
real.func();
}
};
int main()
{
Proxy proxy;
proxy.func();
return 0;
}
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();
}