设计模式之装饰模式

基类

#pragma once
class Component
{
public:
    virtual ~Component();

    virtual void Operation();

protected:
    Component();
};
#include "Component.h"


Component::Component()
{
}


Component::~Component()
{
}

void Component::Operation()
{

}

 

应用类

#pragma once
#include "Component.h"
class ConcreateComponent :
    public Component
{
public:
    ConcreateComponent();
    ~ConcreateComponent();

    void Operation();
};
#include "ConcreateComponent.h"
#include <iostream>


ConcreateComponent::ConcreateComponent()
{
}


ConcreateComponent::~ConcreateComponent()
{
}

void ConcreateComponent::Operation()
{
    std::cout << "ConcreateComponent operation..." << std::endl;
}

 

装饰类基类

#pragma once
#include "ConcreateComponent.h"  //手动改。修改后外部调用时引入的头文件可以减少

class Decorator :
    public Component
{
public:
    Decorator(Component *com);
    virtual ~Decorator();

    void Operation();

protected:
    Component *m_com;
};
#include "Decorator.h"


Decorator::Decorator(Component *com)
{
    this->m_com = com;
}


Decorator::~Decorator()
{

}

void Decorator::Operation()
{

}

 

为应用类添加执行操作的派生类

#pragma once
#include "Decorator.h"
class ConcreateDecorator :
    public Decorator
{
public:
    ConcreateDecorator(Component *com);
    ~ConcreateDecorator();

    void Operation();

    void AddedBehavior();
};
#include "ConcreateDecorator.h"
#include <iostream>


ConcreateDecorator::ConcreateDecorator(Component *com) : Decorator(com)
{
}


ConcreateDecorator::~ConcreateDecorator()
{
}

void ConcreateDecorator::AddedBehavior()
{
    std::cout << "ConcreateDecorator::AddedBehavior..." << std::endl;
}

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

 

测试

#include <iostream>
//#include "Decorator.h" //可以注释,在当前情况
#include "ConcreateDecorator.h"

int main()
{
    Component *com = new ConcreateComponent();
    Decorator *dec = new ConcreateDecorator(com);
    dec->Operation();
    delete dec;
    dec = NULL;

    delete com;
    com = NULL;
    std::cout << "Hello World!\n"; 
}

 

posted @ 2019-10-29 11:38  N_zero  阅读(87)  评论(0)    收藏  举报