Proxy_Pattern - 8BitsCoding/RobotMentor GitHub Wiki
์ ์
๋๋ฆฌ์๋ก์จ ์ผ์ ๋งก๊ธฐ๋ฉด ๊ทธ ์ผ์ ์ฒ๋ฆฌํ๊ณ ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๋ ํจํด
์์๋ก ์ค๋ช
// Main
int _tmain(int argc, _TCHAR* argv[])
{
Image* pImage = new ProxyImage(_T("Image.png"));
// ํ๊ณ ์ถ์๊ฒ ํ ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ ๋๋ฉด ๋ค์๋ถํฐ๋ ๊ทธ๋ฅ ๋ถ๋ฌ์ ์ฐ๊ณ ์ถ์
pImage->ShowImage(); // ๋ก๋ฉ ๋ฐ ์ถ๋ ฅ
// ์ฌ๊ธฐ๋ ๊ทธ๋ฅ ๋ถ๋ฌ ์ฐ๋ ๋ถ๋ถ.
pImage->ShowImage(); // ์บ์ฑ ์ถ๋ ฅ
pImage->ShowImage(); // ์บ์ฑ ์ถ๋ ฅ
delete pImage;
return 0;
}
// Subject ์ธํฐํ์ด์ค
class Image
{
public:
virtual void ShowImage() = 0;
};
// RealSubject ์์ ํด๋์ค
class RealImage : public Image
{
public:
RealImage(const TCHAR* name) : mFile(name) {}
public:
void LoadImage() { wcout << "disk from loading file : " << mFile.c_str() << endl; }
void ShowImage() { wcout << "show image : " << mFile.c_str() << endl; }
private:
tstring mFile;
};
//------------------------------------------------------------------
// Proxy ์์ ํด๋์ค
class ProxyImage : public Image
{
public:
ProxyImage(const TCHAR* name) : mFile(name), mImage(NULL) {}
~ProxyImage() { if (mImage) delete mImage; }
public:
void ShowImage()
{
if (!mImage)
{
mImage = new RealImage(mFile.c_str());
mImage->LoadImage();
}
mImage->ShowImage();
}
private:
RealImage* mImage;
tstring mFile;
};