Паттерн Proxy и виртуальный класс Interface
От: PWW  
Дата: 04.06.08 09:46
Оценка:
В паттерне 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.