一个类的功能扩展可以有两种方式
:
(1)
类的继承
(
高耦合,会产生更多的子类,从而引起类的爆炸
)
(2)
对象组合即装饰模式
(
降耦,不会创造更多的子类
)
动态的为对象添加功能)
所以类应该对扩展开放,对修改关闭 。
装饰者设计模式注意事项:
(1)
装饰者和被装饰者必须具有相同的超类型。
(2)
装饰者即可以包装被装饰者,也可以包装装饰者。往往利用多层包装来达到目的。
(3)
装饰者中组合了被装饰者对象
(
装饰类的关键特征
)
。使得我们能够通过嵌套装饰来动态扩展行为。
四个概念:
(1)
抽象的构件角色(
Component):
它是一个接口,封装了将要添加的功能(方法)。
它相当于
IO
中的
InputStream
。(
或
OutputStream
)
(2)
具体的构件角色(
ConcreteComponent
):
它是一个类,该类实现了
Component
接口,因此该类中封装了将要添加的功能的一种实现方法。
(3)
装饰角色(
Decorator):
它是一个类,该类也实现了
Component
接口,同时也必须持有接口
Component
的对象的引用,
该类也实现了
Component
接口中的方法。
a:
该类的构造方法需要传递过来一个
Component
对象的引用。
b:
重写的方法(即是添加的功能)需要调用
Component
对象的该方法。
(4)
具体的装饰角色(
Decorator
类的子类,可以有一个,也可以有多个):
这些类继承了类
Decorator,
要重写父类的方法(要添加的功能),和自身的构造方法。
a:
构造方法要用到
super。
b:
第一步:
super
父类的该方法。
第二步:添加自己的功能(一些句子)。
装饰者
:Java
IO
框架和
Collection
框架
(
一
)
Java IO
框架
J
DK5.0
中
60
多个
IO
流类组成了四大家族:
InputStream
,
OutputStream
,
Reader
,
Writer
。
InputStream
/
OutputStream
是对字节序列进行操作的抽象类。
Reader/Writer
是基于
Unicode
代码单元进行操作的抽象类。
InputStream
具有读入功能的抽象被装饰器。
FileInputStream
具有读入文件功能的具体被装饰器
FilterInputStream
具备装饰器的抽象意义
BufferedInputStream
具有具体功能
(
缓冲功能
)
的装饰器
•
InputStream
:字节序列输入类鼻祖
----------------------
Component
•
public abstract class
InputStream
implements Closeable
•
最基本的读取字节的抽象方法,供子类扩展。
•
public abstract
int
read() throws
IOException
;
•
•
FileInputStream
:
读取文件中的字节流类
继承
InputStream
------------
ConcreteComponent
•
public class
FileInputStream
extends
InputStream
•
构造函数
•
public
FileInputStream
(String name) throws
FileNotFoundException
•
本地方法,与操作系统低层交互的具体读入方法
•
public
native
int
read() throws
IOException
; (
基于本地方法的底层实现
,java
调用非
java
程序实现
)
•
FilterInputStream
:
过滤流类,起装饰器作用,用于对输入装配各种功能
------------
Decorator
•
public
class
FilterInputStream
extends
InputStream
•
用于记录被装饰者,也就是需要装配新功能的
InputStream
对象
•
protected volatile
InputStream
in;
•
构造装饰器
in
用来设置需要被包装
InputStream
对象
•
protected
FilterInputStream
(
InputStream
in) {
this.in
= in; //
设置需要被包装
InputStream
对象
}
•
读入字节
•
public
int
read() throws
IOException
{ return
in.read
(); }
•
•
BufferedInputStream
:
使输入流具有缓冲功能,是一种可以装配缓冲功能的装饰器,继承
FilterInputStream
---------------------------
ConcreteDecorator
•
public
class
BufferedInputStream
extends
FilterInputStream
•
//
构造器
in
就是被装配缓冲功能的
InputStream
public
BufferedInputStream
(
InputStream
in) { this(in,
defaultBufferSize
);
分享到:
相关推荐
Java IO 与 装饰模式 在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种...
Java的IO库是一个复杂而强大的系统,其设计思想和实现方式体现了多种设计模式,包括Decorator(装饰者)模式和Adapter(适配器)模式。本文将深入探讨这两个模式在Java/IO中的应用,并通过实例解释它们如何使得Java...
在Java EE环境中,如Spring框架中,设计模式的运用更是无处不在,如依赖注入(DI)利用了工厂模式和代理模式,AOP(面向切面编程)则基于代理模式和装饰者模式。 总之,《设计模式在Java语言中的运用》这本书可能会深入...
【装饰器模式】是一种设计模式,它允许向现有的对象添加新的功能,同时又不改变其原有结构。在Java IO类库中,装饰器模式被广泛使用,以灵活地扩展类的功能,而避免了使用继承带来的复杂性。装饰器模式的核心在于,...
Java IO流的设计采用了装饰者模式,形成了丰富的层次结构。通过组合不同的装饰流,可以实现各种复杂的数据处理需求,如转换编码、压缩、加密等。 三、管道流和缓冲流 - PipedInputStream和PipedOutputStream允许在...
**JAVA设计模式** 在软件工程领域,设计模式是一种在特定情境下解决问题的可复用解决方案。它们是经验的总结,代表了在特定上下文中被广泛接受的、经过时间考验的最佳实践。Java设计模式是面向对象编程中的一种重要...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。...通过阅读《设计模式——Java语言中的应用》这本书,你可以更深入地学习和掌握这些模式的细节及其在实际开发中的应用。
Java IO类库遵循一种称为“装饰者模式”的设计模式,这种模式允许开发者通过增加额外的行为来扩展现有的类,而不改变其结构。Java IO的类结构主要由以下几个层次构成: 1. **根接口**:`InputStream` 和 `...
### Java设计模式入门详解 #### 一、设计模式概述 设计模式是软件工程领域中一种通用的解决方案,它描述了在特定情况下解决常见问题的方法。《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements ...
此外,为了提高性能和功能,Java IO还提供了大量的过滤器流和装饰器模式来增强基本流的功能。 #### 二、Java IO系统的组成 Java IO系统由多个层次组成,每个层次都有其特定的职责和功能: - **核心流**:包括`...
设计模式是软件工程中的...以上23种设计模式是软件开发中常用的经典模式,学习和掌握这些模式对于提升代码质量和可维护性至关重要。通过阅读和理解这些Java实现,开发者能够更好地应用设计模式,解决实际项目中的问题。
Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以...通过学习和实践《Java 设计模式最佳实践》中的示例,开发者可以加深对设计模式的理解,提高开发效率。
IO系统解构有装饰者设计模式息息相关,所以先从分析它们的关系:
Java设计模式是软件工程中的一种最佳实践,它是一种在特定情境下解决常见问题的经验总结。设计模式并不是具体的代码或库,而是对在软件设计中反复出现的问题及其解决方案的描述。这些模式提供了可重用的解决方案,使...
Java企业设计模式是软件开发中不可或缺的一部分,它们是经过时间考验、被广泛接受的解决方案模板,用于解决在大型企业级应用程序开发中常见的问题。这些模式提供了可重用的结构,帮助开发者更有效地组织代码,提高...
Java的23种设计模式是软件工程中非常重要的概念,它们是解决常见编程问题的成熟解决方案,被广泛应用于各种复杂的软件开发中。设计模式不是具体的代码或库,而是一种通用的、可重用的设计方案,它描述了在特定上下文...
在Java编程语言中,I/O(输入/输出)是处理数据传输的核心部分,尤其是在处理文件、网络通信或者系统间的数据交换时...此外,了解和使用装饰器模式也是理解Java IO流设计的关键,因为很多处理流就是装饰器模式的应用。
在Java编程语言中,IO流(Input/Output Stream)是处理数据输入和输出的主要机制,而Decorator设计模式是一种结构型设计模式,它允许我们在运行时动态地给对象添加新的行为或责任。这两种概念的结合使得Java IO系统...