咸鱼程序员之java设计模式第九篇-装饰者模式
一、装饰者定义
装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。
属于结构型模式。
创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。
二、装饰者的介绍
1. 意图:
动态地给一个对象添加一些额外的职责。
2. 主要解决:
一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。
3. 何时使用:
在不想增加很多子类的情况下扩展类
4. 使用场景:
(1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。
装饰者(装饰器)模式对于程序员来说是一个神级的设计模式,,当我们代码使用这种模式做继承时,说明你已经进阶到高级程序员的门槛了。。。。
下面我们具体来看看装饰者模式具体的代码实现:
假设我现在有一个拍照功能,我想实现添加美颜和滤镜两个功能 。。。
首先我们有一个基本的抽象组件component .他又一个实现类功能-拍照 如下:
下面我们定义一个抽象的装饰器decorator 如下:
接下来 ,我们来具体添加装饰器的实现:
可以发现装饰器和原有的功能都有一个共同的超类:component
下面我们来测试一下:
ok,这就是装饰器模式的具体思想 。。。。。
下面我们看一看具体装饰器模式在java中的经典应用 -文件io
首先 inputstream 类有一个close方法。是一个被装饰者-相当于component:
下面有一个filterinputstream 。这个类继承了inputstream 并且有一个close 方法的包装----相当于是一个抽象的装饰器coractor
我们接着看具体的装饰器实现者:
以上三个具体的装饰器的实现者 分别对装饰器进行不同的扩展。。。这就是经典的装饰器模式。。。。
okay 本节分享就到这里 希望对您有所帮助。。。