当前位置:天才代写 > tutorial > C语言/C++ 教程 > 设计模式的理会和实现(C++)之九-Decorator模式

设计模式的理会和实现(C++)之九-Decorator模式

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:380

副标题#e#

浸染:

动态地给一个工具添加一些特另外职责。就增加成果来说,Decorator 模式对比生成子类更为机动。

UML布局图:

设计模式的剖析和实现(C++)之九-Decorator模式

抽象基类:

1)Component:界说一个工具接口,可觉得这个接口动态的添加职责.

2)Decorator:维持一个指向Component的指针,而且有一个和Component一致的接口函数.


#p#副标题#e#

接口函数:

1)Component::Operation:这个接口函数由Component声明,因此Component的派生类都需要实现,可以在这个接口函数的基本上给它动态添加职责.

理会:

Decorator的派生类可觉得ConcreateComponent类的工具动态的添加职责,可能可以这么说:Decorator的派生类装饰ConcreateComponent类的工具.详细是这么实现的,首先初始化一个ConcreateComponent类的工具(被装饰者),回收这个工具去生成一个Decorator工具(装饰者),之后对Operation函数的挪用则是对这个Decorator工具成员函数的多态挪用.这里的实现要点是Decorator类和ConcreateComponent类都担任自Component,从而两者的接口函数是一致的;其次,Decorator维护了一个指向Component的指针,从而可以实现对Component::Operation函数的动态挪用.

实现:

1)Decorator.h

/**//********************************************************************
    created:    2006/07/20
    filename:     Decorator.h
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Decorator模式的演示代码
*********************************************************************/

#ifndef DECORATOR_H
#define DECORATOR_H

// 抽象基类,界说一个工具接口,可觉得这个接口动态的添加职责.
class Component
{
public:
    Component(){}
    virtual ~Component(){}

    // 纯虚函数,由派生类实现
    virtual void Operation() = 0;
};

// 抽象基类,维护一个指向Component工具的指针
class Decorator
    : public Component
{
public:
    Decorator(Component* pComponent) : m_pComponent(pComponent){}
    virtual ~Decorator();

protected:
    Component* m_pComponent;
};

// 派生自Component,在这里暗示需要给它动态添加职责的类
class ConcreateComponent
    : public Component
{
public:
    ConcreateComponent(){}
    virtual ~ConcreateComponent(){}

    virtual void Operation();
};

// 派生自Decorator,这里代表为ConcreateComponent动态添加职责的类
class ConcreateDecorator
    : public Decorator
{
public:
    ConcreateDecorator(Component* pComponent) : Decorator(pComponent){}
    virtual ~ConcreateDecorator(){}

    virtual void Operation();

private:
    void AddedBehavior();
};

#endif

#p#副标题#e#

2)Decorator.cpp

/**//********************************************************************
    created:    2006/07/20
    filename:     Decorator.cpp
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Decorator模式的演示代码
*********************************************************************/

#include "Decorator.h"
#include <iostream>

Decorator::~Decorator()
{
    delete m_pComponent;
    m_pComponent = NULL;
}

void ConcreateComponent::Operation()
{
    std::cout << "Operation of ConcreateComponent\n";
}

void ConcreateDecorator::Operation()
{
    m_pComponent->Operation();
    AddedBehavior();
}

void ConcreateDecorator::AddedBehavior()
{
    std::cout << "AddedBehavior of ConcreateDecorator\n";
}

3)Main.cpp

/**//********************************************************************
    created:    2006/07/20
    filename:     Main.cpp
    author:        李创
                http://www.cppblog.com/converse/

    purpose:    Decorator模式的测试代码
*********************************************************************/

#include "Decorator.h"
#include <stdlib.h>

int main()
{
    // 初始化一个Component工具
    Component* pComponent = new ConcreateComponent();
    // 回收这个Component工具去初始化一个Decorator工具,
    // 这样就可觉得这个Component工具动态添加职责
    Decorator* pDecorator = new ConcreateDecorator(pComponent);

    pDecorator->Operation();

    delete pDecorator;

    system("pause");

    return 0;
}

 

    关键字:

天才代写-代写联系方式