Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите разобраться в паттерне декоратор

66K
12 июня 2011 года
redwhite
3 / / 15.03.2011
Код:
#include <iostream>
#include <memory>

class IComponent{
public:
    typedef std::auto_ptr<IComponent> SPtr;
    IComponent* Sptr;
    virtual void operation() = 0;
};

class Component: public IComponent{
public:
    virtual void operation()
    {
        std::cout<<"World!"<<std::endl;
    }
};

class DecoratorOne: public IComponent{
    SPtr _component;

public:
    DecoratorOne(SPtr& component): _component(component) {}

    virtual void operation(){
        std::cout<<", ";
        _component->operation();
    }
};

class DecoratorTwo: public IComponent{
    SPtr _component;

public:
    DecoratorTwo(SPtr& component): _component(component) {}

    virtual void operation(){
        std::cout<<"Hello";
        _component->operation();
    }
};

int main(){

    IComponent::SPtr component(new Component);
   DecoratorTwo obj(IComponent::SPtr(new DecoratorOne(component)));
    obj.operation(); // prints "Hello, World!\n"

    return 0;
}
288
25 июня 2011 года
nikitozz
1.2K / / 09.03.2007
Чем помочь?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог