装饰模式适用的场景: 需要动态的给一个对象添加功能,这些功能还可以动态的撤销。需要增加一些基本功能的排列组合而产生的非常大量的功能。或者因排列的顺序不同产生不同的效果的时候。 装饰模式的优点: Deorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造床很多不同行为的组合。更重要的是,装饰模式把类中的装饰功能从类中搬移去除,这样可以简化原有的类,有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。 装饰模式的缺点:
-
这种比继承更加灵活机动的特性,也同时意味着更加多的复杂性。装饰模式会导致设计中出现很多的小类,如果过度使用,会使程序变得很复杂。
C++代码实现:
// DecorateMethod.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Decorator.h"
int _tmain (int argc , _TCHAR * argv [])
{
//装饰的方法是,首先建造ConcreteComponent对象,
//然后建造ConcreteDecorator1来装饰ConcreteComponent
//借助智能指针来实现.
//最后执行的是最后的装饰类的Operation
shared_ptr
pConcreteComponent(new ConcreteComponent);
shared_ptr
pConcreteDecorator1(new ConcreteDecorator1); pConcreteDecorator1->SetComponent(pConcreteComponent); pConcreteDecorator1->Operation(); std::cout << std::endl; shared_ptr
pConcreteDecorator2(new ConcreteDecorator2); pConcreteDecorator2->SetComponent(pConcreteDecorator1); pConcreteDecorator2->Operation(); getchar(); return 0; }