黑马程序员:java基础之装饰设计模式

简介:
一、什么是装饰设计模式
  当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类成为装饰类。
  装饰类通常会通过构造方法,传递进来一个需要装饰的对象,然后基于这个对象,提供更强大的方法。
  下面是装饰设计模式的一个例子,自己写的MyBufferedReader,并提供了myReadLine方法,IO包中类BufferedReader采用原理也是类似的。
/*
装饰设计模式:MyBufferedReader
*/
importjava.io.*;
classMyBufferedReader
{
privateFileReaderfr;
MyBufferedReader(FileReaderfr)
{
this.fr=fr;
}
publicStringmyReadLine()throwsIOException
{
StringBuildersb=newStringBuilder();
intch;
while((ch=fr.read())!=-1)
{
if(ch=='\r')
continue;
elseif(ch=='\n')
returnsb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
returnsb.toString();
returnnull;
}
publicvoidmyClose()throwsIOException
{
fr.close();
}
}
classMyBufferedReaderDemo
{
publicstaticvoidmain(String[]args)throwsIOException
{
FileReaderfr=newFileReader(" test.txt");
MyBufferedReaderbr=newMyBufferedReader(fr);
Stringline=null;
while((line=br.myReadLine())!=null)
{
System.out.println(line);
}
br.myClose();
}
}
   二、装饰和继承的区别
  装饰设计模式比继承要灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。
  装饰类因为增强已有对象,具备的功能与已有对象是相同的,只不过提供了更强的功能。所以装饰类和被装饰类通常
  是属于同一个体系的。
  如下所示:
MyReaderMyReader
|--MyTextReader|--MyTextReader
|--MyBufferedTextReader|--MyMediaReader
|--MyMediaReader|--MyBufferedReader
|--MyBufferedMediaReader
  如果为了改进一些功能而继承,就可能导致整个继承树过于臃肿,同时要考虑事物之间是否是父类和子类的关系。
  在IO包中,还有一个LineNumberReader,继承了BufferedReader,复用了其中功能(readLine),同时是FileReader的装饰类。如果想要获取所读文件中的行数,可以用这个装饰类,其中主要提供了了setLineNumber(),getLineNumber()方法。   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
目录
相关文章
Java程序员在AI时代必会的技术:Spring AI
在AI时代,Java程序员需掌握Spring AI技术以提升竞争力。Spring AI是Spring框架在AI领域的延伸,支持自然语言处理、机器学习集成与自动化决策等场景。它简化开发流程,无缝集成Spring生态,并提供对多种AI服务(如OpenAI、阿里云通义千问)的支持。本文介绍Spring AI核心概念、应用场景及开发步骤,含代码示例,助你快速入门并构建智能化应用,把握AI时代的机遇。
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
119 9
【AI程序员】通义灵码 AI 程序员全面上线JAVA使用体验
通过 AI 程序编写一个JAVA后台项目登陆页面
488 42
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
106 6
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
79 4
面向 Java 程序员的 SQLite 替代品
SQLite 是轻量级数据库,适用于小微型应用,但其对外部数据源支持较弱、无存储过程等问题影响了开发效率。esProc SPL 是一个纯 Java 开发的免费开源工具,支持标准 JDBC 接口,提供丰富的数据源访问、强大的流程控制和高效的数据处理能力,尤其适合 Java 和安卓开发。SPL 代码简洁易懂,支持热切换,可大幅提高开发效率。
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
183 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
6月前
|
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
54 5
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等