// Copyright(C) 2003 Yoshinori Oota All rights reserved.
#include <iostream>
using namespace std;
class Subject {
public:
Subject();
virtual ~Subject();
virtual void Request() = 0;
};
class RealSubject : public Subject {
public:
virtual ~RealSubject();
virtual void Request();
protected:
friend class ProxySubject;
RealSubject();
private:
string value_;
};
class ProxySubject : public Subject {
public:
ProxySubject();
virtual ~ProxySubject();
virtual void Request();
private:
RealSubject* subject_;
};
Subject::Subject() { }
Subject::~Subject() { }
RealSubject::RealSubject() : value_("very long text -----> ") { }
RealSubject::~RealSubject() { }
void RealSubject::Request() {
cout << value_ << endl;
}
ProxySubject::ProxySubject() : subject_(NULL) { }
ProxySubject::~ProxySubject() {
delete subject_;
subject_ = NULL;
}
void ProxySubject::Request() {
if (subject_ == NULL) {
cout << "(please wait....) ";
subject_ = new RealSubject();
}
subject_->Request();
}
Subject* Create() {
return new ProxySubject();
}
int main() {
Subject* subject = Create();
subject->Request();
subject->Request();
delete subject;
}
|