В паттерне Proxy применяется виртуальный класс Interface, можно обойтись и без него.
Код с Interface классом
class Subject {//"Interface"
public:
virtual void request() = 0;
};
class RealSubject: public Subject {//"Real Interface"
public:
virtual void request() {
// Do something.
};
};
class Proxy: public Subject {
private:
RealSubject* subject;
public:
virtual void request() {
subject -> request();
};
RealSubject* getSubject() {
return subject;
};
void setSubject( RealSubject* subject ) {
this -> subject = subject;
};
};
void main() {
RealSubject* subject = new RealSubject();
Proxy* proxy = new Proxy();
proxy -> setSubject( subject );// Configure the proxy.
proxy -> request();// Use the proxy to access the subject.
//Clean-up.
delete proxy;
delete subject;
}
Код без Interface класса
class RealSubject{//"Real Interface"
public:
virtual void request() {
// Do something.
};
};
class Proxy {//"Proxy"
private:
RealSubject* subject;
public:
Proxy(){subject=0;}
~Proxy(){
delete subject; }
virtual void request() {
if(!subject)
subject=new RealSubject;
subject->request();
};
};
void main() {
Proxy* proxy = new Proxy();
proxy -> request();//создали объект
proxy -> request();//работаем с уже созданным
//Clean-up.
delete proxy;
}
Для чего его ввели, что он даёт дополнительно полезного?
Аналогично паттерн Decorator вроде можно реализовать без него.(возможно и Composite)
Нужен ли этот класс или лучше написать более кратко без него?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>