当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该和已有的功能是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系
装饰和继承的区别,可以继承实现,但如果分支太多,继承体系将会非常臃肿,不建议。可以单独提取一个类,对该体系的父类进行该类的构造函数初始化,即可进行操作。即运用多态技术
继承要写共同抽取的,但是不建议写太多,会很臃肿,装饰者模式会很灵活。在维护先人写的代码时候,进行扩展时,装饰者模式会很好,将原对象传入进行操作即可,不会影响原来代码,自己的出现问题,仍可以用原来的代码
例:
MyReader(共同父类)
--MyTextReader
--MyBufferTextReader
--MyMediaReader
--MyBufferMediaReader
--MyDataReader
--MyBufferDataReader
装饰设计
class MyBufferReader{
MyBufferReader(MyReader m){
}
}
package project.test.Thread.Io;
import java.io.*;
/**
* Created by leiming.chen on 2015/6/25.
*/
class MyBufferedReaderDemo {
public static void main(String[] args) throws IOException {
FileReader r = new FileReader("src\\project\\test\\Thread\\Io\\aaa.txt");
MyBufferedReader mb = new MyBufferedReader(r);
String len = "";
while((len=mb.myReadLine())!=null){
System.out.println(len);
}
mb.myClose();
}
}
class MyBufferedReader{
private FileReader r;
public MyBufferedReader(FileReader r){
this.r=r;
}
public String myReadLine(){
StringBuilder sb = new StringBuilder();
int ch;
try {
while ((ch = r.read()) != -1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
return null;
}catch (IOException e){
e.printStackTrace();
return null;
}
}
public void myClose(){
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
本资料“基于Java的设计模式理解与实现”深入探讨了如何在Java编程环境中应用这些模式。设计模式不仅提升了代码的可读性和可维护性,还促进了团队间的有效沟通。 首先,我们要理解设计模式的基本分类。设计模式通常...
Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...
在Java EE环境中,如Spring框架中,设计模式的运用更是无处不在,如依赖注入(DI)利用了工厂模式和代理模式,AOP(面向切面编程)则基于代理模式和装饰者模式。 总之,《设计模式在Java语言中的运用》这本书可能会深入...
设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式...
- 观察者模式是一种基于发布/订阅模式的行为设计模式,适用于构建响应式的系统。 - 当一个主题的状态发生变化时,所有观察该主题的对象都会收到通知,并能够自动更新自己的状态。 - `java.util.Observable`类和`java...
《设计模式》中文版是一本深受Java开发者喜爱的经典著作,主要涵盖了软件工程中常见的设计模式。这本书深入浅出地讲解了如何在实际编程中应用这些模式,以提高代码的可读性、可维护性和可扩展性。设计模式是经验丰富...
本资料包含23种经典设计模式的Java实现,这些模式都是基于面向对象原则的。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,通常通过双重检查锁定(Double-Checked Locking)或静态...
许多流行的开源项目,如Spring框架,就广泛应用了设计模式,如依赖注入(IoC)是基于工厂模式和代理模式的实现,使得组件间的耦合度降低,系统更易于维护。再如,MVC(模型-视图-控制器)设计模式在Web开发中广泛...
软件设计模式与体系结构是软件开发中两个非常重要的概念。它们指导着软件工程师如何合理地组织和设计软件代码,以确保软件质量、可维护性和可扩展性。下面将对这两个概念进行详细解释,并提供一些关于Java编程语言的...
设计模式并非孤立的概念,它们是基于面向对象设计原则和实践经验的总结。 首先,引言部分强调了学习面向对象软件分析与设计的重要性。学习这一领域的关键是通过实践来提升能力,因为理论与实际操作可能存在差距。...
9. **面向接口编程**:移动设计模式鼓励使用接口而非具体的实现,这样可以增强代码的灵活性和可扩展性,例如,依赖注入模式就是基于这一思想。 10. **设计模式与框架的关系**:许多流行的移动开发框架,如Android的...
例如,Spring的依赖注入功能就基于工厂模式、单例模式、策略模式等多种设计模式。Spring框架的核心理念之一就是依赖注入,这一理念本身就基于控制反转(Inversion of Control,IoC)模式。控制反转是一种设计原则,...
在编程领域,设计模式是解决常见问题的经过验证的可重用解决方案,它们代表了软件设计中的最佳实践。本文将深入探讨Java设计模式的理解,帮助开发者更好地理解和应用这些模式。 首先,我们需要理解设计模式的基本...
**Qt设计模式** Qt是一个流行的跨平台应用程序开发框架,它基于C++,并提供了一整套工具、类库和API,使得开发者能够构建用户界面和应用程序。Qt Creator是官方提供的集成开发环境(IDE),它提供了代码编辑器、...
《Node.js设计模式第2版》是一本深入探讨Node.js编程实践中常见设计模式的书籍,旨在帮助开发者提高代码质量和可维护性。这本书详尽地解释了如何利用Node.js的异步非阻塞I/O特性,以及事件驱动模型来构建高效且可...
【网络编程】 网络编程是计算机通信的核心,主要涉及如何在不同的设备之间交换...这些设计模式在实际开发中非常有用,可以帮助我们写出可维护、可扩展的代码。理解并熟练运用这些模式,可以提升软件设计的质量和效率。
《设计模式——可复用面向对象软件的基础》不仅为读者提供了实用的设计模式,更重要的是,它倡导了一种基于模式的设计思维。通过学习和运用这些模式,开发者可以更好地设计出既高效又易于维护和扩展的软件系统。无论...
### 基于MVC设计模式的Java Web应用对网上购书系统的设计与实现 #### 一、绪论 在互联网技术迅速发展的今天,越来越多的传统业务转移到了线上平台,其中网上购书系统作为电子商务的一个重要分支,其设计与实现不仅...
10. **设计模式**:使用设计模式(如工厂模式、观察者模式、装饰器模式等)可以提高代码的可读性和可维护性。 文件列表中的"www.pudn.com.txt"可能是提供资源来源或相关说明的文本文件,而"WorkFlow"可能是实际的源...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。23种设计模式是由GoF(Gang of Four)在其经典著作《设计模式:可复用面向对象软件的基础》中提出的。这些...