设计模式是一个很理论的,也是一个很经验的东西。纯粹照着文档去理解设计模式不是一个好的方式,当经验有所增长的时候,回过头来看看设计模式这个比较玄的东西,还是比较有好处和用处的。
其实,在JDK中就使用了很多设计模式,为类库的可重用性、可扩展性和灵活性提供了强有力的支持。
JDK的I/O包中就主要使用到了两种设计模式:Adatper模式和Decorator模式
1。Adatper模式
Adatper模式又称为Wrapper模式。Wrapper模式这个词汇也许更能很好的理解其含义。比如JNI技术,具体的实现是C语言写的,不 过最后提供给用户的却是Java程序,也就是用Java包装/包裹/Wrapper了C代码。这就是Wrapper模式,也即Adapter模式。
通过使用Adatper模式,可以使得通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
InputStreamReader是Java IO中将byte流转换为char流的桥梁,其从从byte流中读取字节信息然后将其解码为char流,提供Reader接口所定义的方法。
从代码来看,InputStreamReader类中定义了一个 StreamDecoder 类的变量sd:
private final StreamDecoder sd;
当通过构造器 InputStreamReader(InputStream in) 创建一个InputStreamReader的实例时,通过传入的参数 InputStream 创建一个 StreamDecoder 实例 sd:
public InputStreamReader(InputStream in) {
super(in);
try {
sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## check lock object
} catch (UnsupportedEncodingException e) {
// The default encoding should always be available
throw new Error(e);
}
}
实现Reader接口的read()方法的代码为:
public int read() throws IOException {
return sd.read();
}
我们可以看到,实际上是调用StreamDecoder 的 read()方法来实现的。
形象地说,就是:
你和我合得来,和别人和不来,而我与别人合得来,你让我干活,我让别人干活。
除此之外,Java IO包下还有其他一些类使用了此种模式,如:
OutputStreamWriter:将char流转换成byte流。也就是使用Writer中的方法,但是结果将字符写入到byte流中。
StringReader/StringWriter:实现Reader/Writer到String的转换。
FileInputStream/FileOutputStream:连接File与InputStream/OutputStream,从而实现对文件的读写。
最后,看一下Adatper模式的图形说明:
2。Decorator模式
Decorator模式,顾名思义,就是修饰、装饰、锦上添花的意思。如果一个类已经有一些功能,你如果还想添加一些其他的功能,就可以使用Decorator模式。
通过使用Decorator模式,可以在运行时扩充一个类的功能。其原理是:增加一个装饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为 修饰类的构造器的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。装饰类必须和被装饰的类有相同的接口。
看看Java IO中的 LineNumberReader 类,该类继承自BufferedReader。可以将其看成实现了Reader接口,并且添加了readLine()、getLineNumber()、setLineNumber()这几项功能的类。
该类提供了两个构造器:
LineNumberReader(Reader in)
LineNumberReader(Reader in, int sz)
将原来的、被装饰的Reader作为构造器参数,除了实现Reader接口要求的功能外,还增加添加了新的功能。
在应用中,如果我们需要一行一行的从文件中读取字符,就可以利用LineNumberReader类来完成这样的这样的功能:
LineNumberReader reader = new LineNumberReader(new FileReader("file_name"));
在这里,Reader是一个公共接口,FileReader是一个被装饰的类,LineNumberReader 是装饰类。LineNumberReader 和 FileReader都实现了Reader接口,FileReader作为LineNumberReader 来构造一个LineNumberReader 实例。
对于Decorator模式,可以这样形同:
我们都给老板打工,我们配合做同样的事情,以我作为主,以你与老板联系为主,我做的差不多了,你帮我把把关,美化一下,最后由你想老板汇报。
Decorator模式可以用以下图形说明:
相关推荐
在Java编程中,输入输出(IO)处理是程序设计中的重要组成部分,用于读取、写入和处理数据。Java IO库提供了一整套类来支持各种类型的输入输出操作,包括文件、网络、内存等。而装饰模式是一种结构型设计模式,它...
### JAVA设计模式在JDK中的应用 #### 一、引言 在软件开发过程中,设计模式作为一套被广泛接受的解决方案,能够帮助开发者解决常见的设计问题。Java作为一门流行的编程语言,其标准库(JDK)中巧妙地融入了多种设计...
过滤流(Filter Stream)是Java IO的一个重要设计模式,它在原有流的基础上增加额外功能,如数据转换、压缩、加密等。例如,DataInputStream和DataOutputStream可以处理基本数据类型,GZIPOutputStream和...
JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
Java的23种设计模式是软件工程中非常重要的概念,它们是解决常见编程问题的成熟解决方案,被广泛应用于各种复杂的软件开发中。设计模式不是具体的代码或库,而是一种通用的、可重用的设计方案,它描述了在特定上下文...
java学习笔记1(java io/nio)设计模式
Java企业设计模式是软件开发中不可或缺的一部分,它们是经过时间考验、被广泛接受的解决方案模板,用于解决在大型企业级应用程序开发中常见的问题。这些模式提供了可重用的结构,帮助开发者更有效地组织代码,提高...
这本书籍《设计模式在Java语言中的运用》可能会详细探讨23种GOF(Gang of Four)经典设计模式,并结合Java特性进行解释。 首先,我们来看结构型设计模式,这类模式主要关注如何组合类和对象以创建更大的结构。例如...
Java IO系统是Java平台标准库中的一个重要组成部分,主要用于处理输入输出操作。Java IO系统主要包括两个包:`java.io`和`java.nio`(New IO),其中`java.io`提供了一系列基于流的I/O操作接口与实现类,而`java.nio...
知识点: 1. 反模式概念 反模式是在软件开发中出现的一种负面模式,它通常是指那些...在学习设计模式的过程中,理解每一个模式的意图、结构、参与者和协作关系是十分重要的,这有助于在实际开发中做出恰当的设计选择。
《设计模式——Java语言中的应用》这本书深入探讨了如何在Java中有效地运用这些模式。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过双重检查锁定(Double-Checked Locking)或...
以上仅是部分设计模式的概述,实际的“JAVA设计模式”帮助文档会提供更详尽的解释、示例代码以及如何在Java项目中应用这些模式的指导。理解并熟练运用这些设计模式,可以帮助开发者写出更加灵活、可维护和高效的应用...
通过以上介绍,我们可以看到设计模式在Java开发中的重要性和实用性。每种模式都有其独特的应用场景和解决问题的方式。理解并熟练掌握这些模式,不仅有助于提高编程技巧,还能增强解决实际问题的能力。当然,设计模式...
Java IO类库遵循一种称为“装饰者模式”的设计模式,这种模式允许开发者通过增加额外的行为来扩展现有的类,而不改变其结构。Java IO的类结构主要由以下几个层次构成: 1. **根接口**:`InputStream` 和 `...
在Java编程语言中,`IO`(Input/Output)是处理数据输入和输出的核心部分,尤其是在处理大数据量文件时显得尤为重要。Java IO API提供了一系列类和接口,使得开发者能够高效地读取、写入和操作文件。下面我们将深入...
Java企业设计模式是软件开发中的一种重要思想,它在Java应用程序开发中扮演着核心角色,尤其是在大型企业级项目中。设计模式是对在特定上下文中反复出现的问题及其解决方案的描述,这些解决方案已被证明在许多情况下...
以上只是Java设计模式中的一部分,还有许多其他模式,如职责链模式、解释器模式、状态模式等,它们都在不同的场景下发挥着重要作用。学习和理解这些设计模式对于提升代码质量、优化软件架构具有极大的价值。在实际...
Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...