黑马程序员: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/

   

时间: 2024-11-18 17:45:42

黑马程序员:java基础之装饰设计模式的相关文章

黑马程序员----java基础--网络编程

 一. 网络参考模型 1.OSI参考模型和TCP/IP 参考模型 七层描述: (1). 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流. (2). 数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这一层工作的设备是交换机,数据通过交换机来传输. (3). 网络层:主要将下层接收到的数据进行IP地址(例,192.168.0.1)的封装与解封装.这一层工作的设备是路由器.. (4). 传输层:定义了一

网络资源-黑马程序员Java 知识——精华总结

获取更多资源Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识.................................................................................6 1.何为编程?...................................................................................................................6 2.J

传智播客 黑马程序员JAVA视频分享,0基础到高手的蜕变,不看后悔~~~~

问题描述 全国最顶尖培训机构传智播客的JAVA全套教学视频,一套只要人品不出问题,通过自学就能找到5K工作的视频,我自学也是用的这里面的视频.视频下载链接.拿了视频的,回复一下冒个泡呀~~~ 解决方案 本帖最后由 li413903382 于 2013-02-22 16:09:50 编辑解决方案二:没有人支持么?解决方案三:没有人支持么解决方案四:自己再来支持下解决方案五:支持下你吧,哈俣解决方案六:谢谢分享了,支持哈!!解决方案七:自己来顶了.解决方案八:我觉得不错,对新手而言,非常给力解决方案

黑马程序员--------Java多线程讲解笔记

进程:正在进行中的程序. 每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中一个执行单元或执行情景或执行路径负责进程中程序执行的控制单元 .一个进程中至少要有一个线程.当一个进程中线程有多个时,就是多线程. 为什么要用多线程 1,让计算机"同时"做多件事情,节约时间. 2,后台运行程序,提高程序的运行效率.. 3,多线程可以让程序"同时"处理多个事情. 4,计算机CPU大部分时间处于空闲状态,浪费了CPU资源. 1.创建线程

全国顶尖培训机构黑马程序员JAVA全套教学视频分享

问题描述 大家好,我也是自学派的,只是分享下好的自学视频,自学这套视频,在北京一般找到工作都是5K+如果还想深入的话,还得靠自己继续自学其他扩展提高视频,我只是分享下给大家好东西. 解决方案 解决方案二:在北京5K应该也够呛吧解决方案三:求资源连接我QQ321354544谢谢解决方案四:主公.求资料.QQ:275204149在这先谢谢.

黑马程序员 一、java 概述与基础知识

获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务.这种人和计算机之间交流的过程就是编程.   2.Java 语言概述,历史.特点 是 SUN(Stanford Universit

黑马程序员 四、面向对象(2)

Java帮帮-IT资源分享网四.黑马程序员-面向对象(2) 第四篇:  1.基本数据类型的包装类 引言:Java 提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型, 那么我们怎么能把基本数据类型称为对象呢?  除了 Integer 和 Character 定义的名称和对应的基本类型差异大,其他六种都是将首字母大写 就可以了. Integer,Byte,Float,Double,Short,Long 都是 Number 类的子类.(Number 类后面讲): Character

黑马程序员 二、方法与数组

获得更多资源关注Java帮帮IT资源分享网  二.黑马程序员-方法与数组 第二篇: 1.什么是方法(Method)? 方法是一组为了实现特定功能的代码块的集合.方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护 性强. ②:减少代码重复 一个固定的功能,可能会在程序中多次使用,在使用时只需要调用写好的方法,而不用重复 书写对应的功能代码. 方法在书写时需要注意以下两点: ①:逻辑严谨 方法实现的一个完整的功能,所以

黑马程序员 九、IO 操作(1)

Java帮帮-IT资源分享网  九.黑马程序员-IO 操作(1) 第九篇 IO 文件操作(1)  1.IO 的概述和 File 方法 IO 流用来处理设备之间的数据传输 Java 对数据的操作是通过流的方式 Java 用于操作流的对象都在 IO 包中 File 类在整个 IO 包中与文件本身有关的操作类,所有的与文件本身有关指的是创建.删除 文件等操作.在 java.io 包中的 File 类本身是一个跨平台的文件操作类,所以在操作中要更 多的考虑到各个操作系统的区别. File 即指文件也指文