Download presentation
Presentation is loading. Please wait.
Published by坤大 刁 Modified 8年之前
1
Decorator pattern Leader : Jiankang Gong Member : Xuanya Jiao Jiahong Chen Jiajian Shi Zhen Du lulu Han Tian Han
2
Content 引言 实例分析与简介 优缺点 适用场景
3
穿衣服有多重要?
4
装饰第一版
5
装饰第二版 实例化装饰类,调用装饰类的 方法来实现装饰功能
6
装饰模式 定义:动态地给一个对象添加一些额外的 职责,就增加功能老说,装饰模式比生成 子类更为灵活 修饰模式是类继承的另外一种选择:类继 承是在编译时增加行为,而装饰模式是在 运行时增加行为 装饰模式以对客户透明的方式动态地给一 个对象附加上更多的责任,换言之,客户 端并不会觉得对象在装饰前和装饰后有什 么不同。装饰模式可以在不需要创造更多 子类的情况下,将对象的功能加以扩展。
7
原理
8
装饰第三版
9
齐天大圣
10
源代码 具体构件角色 “ 大圣本尊 ” 猢狲类
11
抽象装饰角色 “ 七十二变 ” 具体装饰角色 “ 鱼儿 ” 具体装饰角色 “ 鸟儿 ” 客户端类
12
“ 见证奇迹的时刻 ” Monkey Move Birds Move Fish Move Fish Move ???
13
优点 装饰模式与继承关系的目的都是要扩展对象的功 能,但是装饰模式可以提供比继承更多的灵活性。 可以通过一种动态的方式来扩展一个对象的功能, 通过配置文件可以在运行时选择不同的装饰器, 从而实现不同的行为。 通过使用不同的具体装饰类以及这些装饰类的排 列组合,可以创造出很多不同行为的组合。可以 使用多个具体装饰类来装饰同一对象,得到功能 更为强大的对象。 具体构件类与具体装饰类可以独立变化,用户可 以根据需要增加新的具体构件类和具体装饰类, 在使用时再对其进行组合,原有代码无须改变, 符合 “ 开闭原则 ”
14
缺点 使用装饰模式进行系统设计时将产生很多小对象, 这些对象的区别在于它们之间相互连接的方式有 所不同,而不是它们的类或者属性值有所不同, 同时还将产生很多具体装饰类。这些装饰类和小 对象的产生将增加系统的复杂度,加大学习与理 解的难度。 这种比继承更加灵活机动的特性,也同时意味着 装饰模式比继承更加易于出错,排错也很困难, 对于多次装饰的对象,调试时寻找错误可能需要 逐级排查,较为烦琐。
15
适用场景 在不影响其他对象的情况下,以动态、透明的方 式给单个对象添加职责。 需要动态地给一个对象增加功能,这些功能也可 以动态地被撤销。 当不能采用继承的方式对系统进行扩充或者采用 继承不利于系统扩展和维护时。不能采用继承的 情况主要有两类:第一类是系统中存在大量独立 的扩展,为支持每一种组合将产生大量的子类, 使得子类数目呈爆炸性增长;第二类是因为类定 义不能继承(如 final 类)
16
总结 装饰者模式挺像一种组合、而且是 可以任意搭配、制定的。当我们有 新的需求的时候、添加一个装饰器 就 ok 。必要的时候可以添加组件、 这样就实现了不用修改现有代码就 可以扩展和修改新的功能的一个目 的。
17
友情提示 ● 抽象构件 (Component) 角色:由 InputStream 扮演。这是一个抽象类, 为各种子类型提供统一的接口。 ● 具体构件 (ConcreteComponent) 角色:由 ByteArrayInputStream 、 FileInputStream 、 PipedInputStream 、 StringBufferInputStream 等类扮演。它 们实现了抽象构件角色所规定的接口。 ● 抽象装饰 (Decorator) 角色:由 FilterInputStream 扮演。它实现了 InputStream 所规定的接口。 ● 具体装饰 (ConcreteDecorator) 角色:由几个类扮演,分别是 BufferedInputStream 、 DataInputStream 以及两个不常用到的类 LineNumberInputStream 、 PushbackInputStream 。
18
Thank you !
19
Test 在东大东门外一家肯德基,小贱周末和女朋友一人点了一个汉堡, 小贱要了沙拉加肉,小贱的女朋友要了沙拉加蔬菜。请写一个具体 构建角色类(汉堡包类),一个抽象装饰类(材料类),三个具体 装饰类(蔬菜类,肉类,沙拉类),一个测试类
20
具体构建角色类(汉堡包类)抽象装饰类 具体装饰类 1 (沙拉类)具体装饰类 2 (蔬菜类)
21
具体装饰类 3 (肉类) 测试类
Similar presentations