前记:最近开始做的项目比较大,其中用到的设计模式比较多,趁这个机会看看书,学习学习,提高自己。看过书后,在这里做个笔记,写些自己的体会。
装饰者模式,动态的将责任(一个功能对象)附加到(装饰)对象上。比如说,现在有一个窗口类,派生出来很多子窗口,现在希望给这些子窗口添加一个工具栏,如果按传统的做法,在原来的窗口类中添加或者继承原来的窗口类,在新的窗口类中添加,但是这样做对原来的代码修改会很多,因为原来的窗口类已经有了很多派生类,二来工具栏可能以后也会不断的修改,那么对工具栏之外的窗口类也一直修改,因为二者耦合在一起了。装饰者模式的做法,就是将工具栏功能封装成一个类,并且同样继承自原来的窗口类,并且在工具栏类中可以添加新的变量或者方法,甚至重写原来窗口类中的方法,在原来窗口类的方法前/后添加新的功能。
用装饰者的术语描述一下,就是装饰者和被装饰者有相同的父类,需要被装饰的行为都在父类中;可以用一个或多个装饰者包装一个对象(被装饰者),装饰者中有被装饰者的引用,可以在构造函数中设置;装饰者可以在被装饰的方法前/后添加自己的行为,达到装饰的目的;在用到被装饰者的地方,可以用装饰者替代。
类图:
参考:《Head First设计模式》