装饰模式(Decorator)属于结构模式,装饰模式提供了一种功能扩展的方法,在不修改原有模块功能的条件下,通过装饰模式来扩展原有模块的功能。
下面是装饰模式的C++实现,代码可到本人github网页下载:设计模式例子
/*
* Example of 'Decorator' design pattern.
* Copyright (C) 2016 Leo Wang
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <iostream>
using namespace std;
class IComponent
{
public:
virtual void func()=0;
};
class CConcreteComponent:public IComponent
{
public:
void func()
{
cout<<"General func!"<<endl;
}
};
class CDecorator:public IComponent
{
public:
IComponent* cp_component;
public:
CDecorator(IComponent* p_component)
{
cp_component=p_component;
};
};
class CConcreteDecorator:public CDecorator
{
public:
CConcreteDecorator(IComponent* p_component):CDecorator(p_component)
{};
public:
void func()
{
cp_component->func();
cout<<"Exteded func!"<<endl;
}
};
int main()
{
IComponent* cp_oricomponent=new CConcreteComponent();
IComponent* cp_decoratecomponent=new CConcreteDecorator(cp_oricomponent);
cp_oricomponent->func();
cp_decoratecomponent->func();
return 1;
};