model
implement
subject
class Subject
{
protected:
Subject();
public:
virtual ~Subject();
public:
virtual void Request() = 0;
};
Subject::Subject()
{
}
Subject::~Subject()
{
}
concrete subject
class ConcreteSubject : public Subject
{
public:
ConcreteSubject();
~ConcreteSubject();
public:
void Request();
};
ConcreteSubject::ConcreteSubject()
{
}
ConcreteSubject::~ConcreteSubject()
{
}
void ConcreteSubject::Request()
{
cout << "ConcreteSubject......request..." << endl;
}
proxy
class Proxy
{
public:
Proxy();
Proxy(Subject* sub);
~Proxy();
public:
void Request();
private:
Subject *_sub;
};
Proxy::Proxy()
{
}
Proxy::Proxy(Subject* sub)
{
_sub = sub;
}
Proxy::~Proxy()
{
delete _sub;
}
void Proxy::Request()
{
cout << "Proxy request..." << endl;
_sub->Request();
}
应用
void proxy_test()
{
Subject* sub = new ConcreteSubject();
Proxy* proxy = new Proxy(sub);
proxy->Request();
}
总结
- 抽象:concrete subject的公共基类Subject进行了抽象
- 扩展:concrete subject可以进行扩展
- Proxy把具体的工作(Request)委托给了concrete subject去实现
- 开发者不需要知道concrete subject,开发者只与公共基类Subject和Proxy交互