博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰者模式
阅读量:6311 次
发布时间:2019-06-22

本文共 617 字,大约阅读时间需要 2 分钟。

hot3.png

1、对应的设计原则:类应该对扩展开放,对修改关闭。

2、装饰者模式:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。(个人理解:动态的用一个或者多个装饰者装饰对象,且对象与装饰者来源于同一个超类)

3、类图如下:

说明:

装饰者和被装饰对象有相同的超类型。

可以用一个或者多个装饰者包装一个对象。

装饰者可以在被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。

对象可以在任何时候被装饰,即在运行时动态地、不限量地用装饰者来装饰对象。

 4、例子

以咖啡为例,我们以饮料为主题,然后在运行时以调料来装饰饮料。

4.1 类图如下:

4.2 代码实现:暂时省略

5、JAVA API中的装饰者模式

 

6、优点

(1)装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,或者除          掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。

(2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

个人理解:动态扩展对象功能,通过不同的装饰类组合创建不同的对象,减少了继承带来的类爆炸。

7、缺点

装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂

转载于:https://my.oschina.net/u/3644171/blog/1577981

你可能感兴趣的文章
Diy React
查看>>
Centos 6.4 python 2.6 升级到 2.7
查看>>
数据结构、排序算法、归并排序
查看>>
js跑马灯
查看>>
Linux小白的大师之路
查看>>
AI与区块链的融合会给人类带来什么
查看>>
036-小试题
查看>>
2017 JavaOne参会感想
查看>>
常见模块 collections 模块 re模块 random模块
查看>>
在jquery的ajax方法中的success中使用return要注意的问题
查看>>
ios和安卓在 position:absolute 嵌套在app内的区别
查看>>
文件和目录权限chmod,更改所有者和所属组chown,umask命令,
查看>>
压缩工具gzip、bzip2、xz
查看>>
三:动态SQL
查看>>
LAMP3
查看>>
Tomcat 安装与优化
查看>>
14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项
查看>>
shell中的文件目录属性判断
查看>>
Java 并发包中的读写锁及其实现分析
查看>>
微信小程序开发系列七:微信小程序的页面跳转
查看>>