반응형
Proxy Pattern (프록시 패턴)
목적
Proxy(대리자, 대리인) pattern은 A라는 객체를 접근, 제어하기 위해 대리자인 proxyA를 통해서만 접근 가능하도록 하는 구조를 만드는 패턴이다. 또한
이 패턴은 A라는 객체를 실제로 사용하기 전까지는 객체 생성과 초기화에 들어가는 비용을 발생시키지 않겠다는 의미이다.(포인터와 유사)
또한 proxyA객체는 A객체의 속성값을 변경시켜서는 안된다.
사용 시나리오
- 어떤 웹페이지 하단에 이미지가 존재한다고 가정한다.
- 해당 이미지는 사용자가 스크롤을 내릴때만(필요할때만) 불러오게 구현한다.
[Subject(interface)]
class Image {
public:
virtual void renderImage() = 0;
virtual ~Image();
};
[Realsubject]
class RealImage : public Image {
public:
RealImage(const string filePath) {
cout<<"Load Image:"<<filePath<<endl;
}
void renderImage() override final {
cout<<"Render real image"<<endl;
}
};
[Proxy]
class ProxyImage : public Image {
public:
ProxyImage(string filePath):realImage(nullptr) {
this->filePath = filePath;
}
~ProxyImage() override {
if(realImage != nullptr)
delete realImage;
}
void renderImage() override final {
if(realImage == nullptr) {
realImage = new RealImage(filePath);
}
realImage->renderImage();
}
private:
Image* realImage;
string filePath;
};
[Client]
int main(int argc, const char * argv[]) {
ProxyImage* proxyImage = new ProxyImage("/web/image/test.png");
proxyImage->renderImage();
delete proxyImage;
return 0;
}
실행결과
Load Image:/web/image/test.png
Render real image
반응형
'Design Patterns > Structural Patterns' 카테고리의 다른 글
Flyweight Pattern (C++) (0) | 2019.11.09 |
---|---|
Facade Pattern (C++) (0) | 2019.10.27 |
Bridge Pattern (C++) (0) | 2019.10.13 |
Decorator Pattern (C++) (0) | 2019.07.21 |
Composite Pattern (C++) (0) | 2019.04.21 |