C++装饰器模式(Decorator)

 C++
时间:

使用场景

  1. 扩展一个类的功能。

  2. 动态增加功能,动态撤销。

在OO设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通常继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。

Decorator

#include<iostream>

using namespace std;

//组件
class Component
{
    public:
        virtual ~Component() {}
        virtual void Operation() {}
    protected:
        Component() {}
    private:
};

//具体组件
class ConcreteComponent : public Component
{
    public:
        ConcreteComponent() {}
        ~ConcreteComponent() {}
        void Operation() { cout << "ConcreteComponent operation..." << endl; }
    protected:
    private:
};

//装饰器
class Decorator : public Component
{
    public:
        Decorator(Component* com) { this->_com = com; }
        virtual ~Decorator() { delete _com; }
        void Operation() {}
    protected:
        Component* _com;
    private:
};

//具体装饰器
class ConcreteDecorator : public Decorator
{
    public:
        ConcreteDecorator(Component* com) : Decorator(com) {}
        ~ConcreteDecorator() {}
        void Operation() { _com->Operation(); this->AddedBehavior(); }
        void AddedBehavior() { cout << "ConcreteDecorator::AddedBehacior......" << endl; }
    protected:
    private:
};

int main()
{
    Component* com = new ConcreteComponent();
    Decorator* dec = new ConcreteDecorator(com);
    dec->Operation();
    delete dec;
    return 0;
}

0 评论