proxy模式 c++设计范例
时间: 2023-09-11 12:06:00 浏览: 58
下面是一个简单的C++代码示例,演示了如何使用代理模式:
首先,定义一个接口,作为代理和实际对象的共同接口:
```c++
class Image {
public:
virtual void display() = 0;
};
```
然后,实现接口的实际对象:
```c++
class RealImage : public Image {
private:
std::string fileName;
public:
RealImage(std::string fileName) {
this->fileName = fileName;
loadFromDisk(fileName);
}
void display() override {
std::cout << "Displaying " << fileName << std::endl;
}
void loadFromDisk(std::string fileName) {
std::cout << "Loading " << fileName << std::endl;
}
};
```
接下来,实现代理对象,代理对象会在调用实际对象前进行一些额外操作:
```c++
class ProxyImage : public Image {
private:
RealImage* realImage;
std::string fileName;
public:
ProxyImage(std::string fileName) {
this->fileName = fileName;
}
void display() override {
if (realImage == nullptr) {
realImage = new RealImage(fileName);
}
realImage->display();
}
};
```
最后,我们可以使用代理对象来访问实际对象,代理对象会在访问实际对象前进行一些额外操作,比如加载图片:
```c++
int main() {
Image* image = new ProxyImage("test.jpg");
// 图像从磁盘加载
image->display();
std::cout << std::endl;
// 图像不需要从磁盘加载
image->display();
}
```
输出为:
```
Loading test.jpg
Displaying test.jpg
Displaying test.jpg
```
在这个例子中,我们使用代理对象来控制访问实际对象,代理对象会在访问实际对象前进行一些额外操作,比如加载图片。这种设计模式可以用来实现远程代理、虚拟代理、保护代理等功能。