[设计模式]装饰者模式
2016-07-24 00:09
155 查看
前记:最近开始做的项目比较大,其中用到的设计模式比较多,趁这个机会看看书,学习学习,提高自己。看过书后,在这里做个笔记,写些自己的体会。
装饰者模式,动态的将责任(一个功能对象)附加到(装饰)对象上。比如说,现在有一个窗口类,派生出来很多子窗口,现在希望给这些子窗口添加一个工具栏,如果按传统的做法,在原来的窗口类中添加或者继承原来的窗口类,在新的窗口类中添加,但是这样做对原来的代码修改会很多,因为原来的窗口类已经有了很多派生类,二来工具栏可能以后也会不断的修改,那么对工具栏之外的窗口类也一直修改,因为二者耦合在一起了。装饰者模式的做法,就是将工具栏功能封装成一个类,并且同样继承自原来的窗口类,并且在工具栏类中可以添加新的变量或者方法,甚至重写原来窗口类中的方法,在原来窗口类的方法前/后添加新的功能。
用装饰者的术语描述一下,就是装饰者和被装饰者有相同的父类,需要被装饰的行为都在父类中;可以用一个或多个装饰者包装一个对象(被装饰者),装饰者中有被装饰者的引用,可以在构造函数中设置;装饰者可以在被装饰的方法前/后添加自己的行为,达到装饰的目的;在用到被装饰者的地方,可以用装饰者替代。
类图:
参考:《Head First设计模式》
装饰者模式,动态的将责任(一个功能对象)附加到(装饰)对象上。比如说,现在有一个窗口类,派生出来很多子窗口,现在希望给这些子窗口添加一个工具栏,如果按传统的做法,在原来的窗口类中添加或者继承原来的窗口类,在新的窗口类中添加,但是这样做对原来的代码修改会很多,因为原来的窗口类已经有了很多派生类,二来工具栏可能以后也会不断的修改,那么对工具栏之外的窗口类也一直修改,因为二者耦合在一起了。装饰者模式的做法,就是将工具栏功能封装成一个类,并且同样继承自原来的窗口类,并且在工具栏类中可以添加新的变量或者方法,甚至重写原来窗口类中的方法,在原来窗口类的方法前/后添加新的功能。
用装饰者的术语描述一下,就是装饰者和被装饰者有相同的父类,需要被装饰的行为都在父类中;可以用一个或多个装饰者包装一个对象(被装饰者),装饰者中有被装饰者的引用,可以在构造函数中设置;装饰者可以在被装饰的方法前/后添加自己的行为,达到装饰的目的;在用到被装饰者的地方,可以用装饰者替代。
类图:
参考:《Head First设计模式》
相关文章推荐
- String、StringBuffer、StringBuilder
- hdu 2012 A计划 BFS
- C/C++ 图像处理(12)------图像の透视变换
- 我新的博客开张啦
- C地址空间测试
- Destroying The Graph(最小割+拆点)
- Socket —— 发送端与接收端通过 io 交互
- Develop -- Training(十六) -- 显示绘图和OpenGL ES
- 输入手机号码自动填充空格 变成3-4-4格式
- angularJS $watch $digest $apply
- AsyncTask 源码分析
- 欢迎使用CSDN-markdown编辑器
- 2016夏季练习——最短路
- cmd 常见命令(type(读取文本文件)、Shell:AppsFolder)
- JAVA面向对象-----多态
- JAVA面向对象-----多态
- 基于JSP的RSS阅读器的设计与实现方法(推荐)
- JSP使用过滤器防止SQL注入的简单实现
- .net core 1.0 实现单点登录负载多服务器
- 网上相册(上传与下载)