以前对Decorator模式一直印象不深,甚至觉得有点鸡肋.问题是我为什么要用这个模式,难道直接继承不是更直接吗? 简约就是最好的,这个原则适用于所有领域.
的确,这个模式确实好坏参半,最大的优点是对类的职责进行了剥离,使得功能的添加更加层次化,相比一个巨大的类,这个当然看起来不错. 装修的都是附加的功能和基本功能的扩展. 只不过,这样做的代价并不低, 比如产生很多装修类的碎片,增加了功能逻辑的碎片化,装修的时候,也难以很好的隔离原始类,尤其原始类是个庞大的类时,如果不能隔离,这个模式,也就破产. 我到目前为止,没有看到很好的实际应用的例子.
所以只能评价为军训级别(战斗中很少用), 其实我想说鸡肋级别, 不过如果谁有很好的体会,可以讨论,非常想听典型场景.
适用场景:(军训级别)
1. 对单个对象,添加非其核心的修饰性功能,而原对象保持不变
2. 对某个方法进行修改,但是又不方便修改原类.
特点:
要求装修类和原始类同接口,这一点只是出于透明操作的原则.
原始类应该保持简单.
区别:
Proxy不改变原有功能
Strategy是行为委托模式, Decorator是结构委托模式.
// Decorator.cpp : Defines the entry point for the console application.//#include "stdafx.h"#includeusing namespace std;class Target{public: virtual void Method(){ cout << "Target method call." << endl; }};class Decorator : public Target{ Target* _component; //Target for decoratingpublic: Decorator(Target* component): _component(component){} virtual void Method(){ _component->Method(); cout << "Im worker for decorating your house." << endl; }};class TargetConcret : public Target{public: virtual void Method(){ cout << "This is new house I just buy." << endl; }};int main(int argc, char* argv[]){ TargetConcret* house = new TargetConcret(); Decorator decorator(house); decorator.Method(); return 0;}