`
schy_hqh
  • 浏览: 542554 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(IO)装饰设计模式

 
阅读更多

 

装饰:底层仍然使用原始的功能,但是对外提供封装好的增强的功能!

 

package com.gc.file;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
 * 使用字符缓冲区对Reader进行装饰---提高读取速度
 * 每次读取磁盘时,读一批数据到字符数组(缓冲区)中
 * 外界取得时候直接从缓冲区中获取数据,因此速度快!
 *
 */
public class MyBufferedReader {
	
	private Reader reader;//底层仍然用Reader的方法,但是对外提供了增强的读取功能
	
	public MyBufferedReader(Reader reader) {
		this.reader = reader;
	}
	
	private char[] cbuf = new char[1024];//字符缓冲区
	
	private int pos = 0;//记录读取位置
	
	private int count = 0;//记录总数
	
	public int myRead() throws IOException {
		if(count==0) {
			//往字符缓冲区读,底层用到的仍然是Reader的read()
			count = reader.read(cbuf);
			//从新读取后,指针归0
			pos = 0;
		}
		if(count<0)
			return -1;
		count--;
		//返回的时候直接操作缓冲区,而不是去磁盘读1个返回1个,提高了效率---装饰:本质不变,但增强了功能(提高读取速度)
		char ch = cbuf[pos++];
		return ch;
	}
	
	public static void main(String[] args) throws IOException {
		MyBufferedReader myReader = new MyBufferedReader(new FileReader("temp\\text.txt"));
		int ch = 0;
		while((ch=myReader.myRead())!=-1) {
			System.out.print((char)ch);
		}
	}
}

 

 

层层包装---装饰

(将底层功能进行了隐藏)

不管怎么装饰,仍离不开原始的功能

基于原始功能再进行扩展对外暴露的则是扩展后的功能



 

 

 

  • 大小: 64.7 KB
分享到:
评论

相关推荐

    50丨装饰器模式:通过剖析JavaIO类库源码学习装饰器模式1

    这也是我们在第 10 节中讲的不推荐使用继承的原因。基于装饰器模式的设计方案在第 10 节中,我们还讲到“组合优于继承”,可以“使用组合来替代继承”。针对刚刚的

    Java设计模式之装饰器模式.docx

    实际上Java提供的工具包中,IO相关工具就普遍大量使用了装饰器模式,例如充当装饰功能的IO类如BufferedInputStream等,又被称为高级流,通常将基本流作为高级流构造器的参数传入,将其作为高级流的一个关联对象,...

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

     下面是装饰设计模式的一个例子,自己写的MyBufferedReader,并提供了myReadLine方法,IO包中类BufferedReader采用原理也是类似的。 /* 装饰设计模式:MyBufferedReader */ importjava.io.*; ...

    java装饰模式

    该文档描述了java装饰模式,装饰模式是javaIO流底层所采用的设计模式。

    javaIO读书笔记

    IO系统解构有装饰者设计模式息息相关,所以先从分析它们的关系:

    源码:阎宏设计模式光盘

    com.javapatterns.javaio 专题:设计模式在Java I/O中的应用 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.liskov 里氏代换原则 com.javapatterns.lod 迪米特法则 ...

    Java IO文件过滤器对命令设计模式的使用

    java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式,下面分两部分来讲Java IO文件过滤器对命令设计模式的使用,一起看看吧

    IO流的总结

    输入流和输出流 字节流和字符流 缓冲区 装饰设计模式

    leetcode18java-StudyDayUp:基于java数据结构、算法、leetcode题目讲解,23种设计模式全面复习

    数据结构、算法、leetcode题目讲解,23种设计模式 全面复习 一、java 1、java基础知识 2、java容器 3、java并发 4、java虚拟机 5、java IO 二、设计模式 1. 单例模式 2. 原型模式 3. 工厂方法模式 4. 抽象工厂模式 5...

    Software-Patterns:Java中的软件设计模式

    用Java编写的软件设计模式 策略模式 定义一系列算法,封装每个算法,并使它们可互换。 策略使算法独立于使用该算法的客户端而变化。 文件夹:策略模式 观察者模式 对象称为主题,维护其依赖者的列表,称为观察者,...

    java高级+struts2总结

    IO流高级 设计模式 多线程 网络编程 struts2 注解 反射 MVC+Log4 资源文件 泛型 观察者模式 装饰模式

    mohuishou.github.io:Mohuishou的博客

    博客 博客地址: 系列文章 Go 进阶训练营系列 Week01: 微服务 Week02: Go错误处理 Week03: Go 并发编程 Go并发编程(十) 深入...Go设计模式08-装饰器模式 Go设计模式09-适配器模式 Go设计模式10-门面模式 Go设计模式11

    高级java笔试题-JNotes:Java工程师必备的技术知识点,全力打造Java程序员的技能体系知识库;主要体现在Java基础、算法、网络、

    设计模式(7)装饰器模式 设计模式(8)代理模式 设计模式(9)外观模式 设计模式(10)桥接模式 设计模式(11)组合模式 设计模式(12)享元模式 设计模式(13)策略模式 设计模式(14)模板模式 设计模式(15)...

    深入了解Python装饰器的高级用法

    原文地址 ... 介绍 我写这篇文章的主要目的是介绍装饰器的高级用法。...Decorator模式是一个面向对象的设计模式,它允许动态地往现有的对象添加行为。当你装饰了一个对象,在某种程度上,你是在独立于同一个类的其他实例

    gmlwjd9405.github.io:Heee的开发博客

    Heee的开发博客 权熙贞 算法 [算法]联合查找算法 [算法]什么是基本算法 [算法]什么是Kruskal算法 [算法]什么是最小生成树(MST)? [算法]什么是拓扑排序 [算法]什么是二部图?... [设计模式]什么是观察者

    最常用的12种设计模式小结

    装饰着模式(Decorator): 动态的给一个对象添加一些额外的职责. 比如java.io包. BufferedInputStream封装了FileInputStream, 它们都实现了InputStream接口, 但前者实现了readLine方法. 3.代理模式(Proxy): 为其他对象...

    Java基础知识点总结.docx

    二十一、 设计模式★★★★★ 136 设计模式简介 136 单例设计模式:★★★★★ 156 工厂模式★★★★★ 159 抽象工厂模式★★★★★ 163 建造者模式 170 原型模式 177 适配器模式 182 桥接模式 188 过滤器模式 192 ...

    zhx2020.github.io:Java学习+面试

    设计模式 单例模式 工厂模式 适配器模式 代理模式 装饰器模式 数据库 排序算法 归并排序 计数排序 桶排序 基数排序 加分必备知识点 Docker使用 Linux常用命令 Git教程 Git简介 安装Git 创建版本库 时光机穿梭 git...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释...

    java se和java ee基础功能点开发测试包

    该包围绕java se结合java ee的基础应用对目前最基础最常见的应用分别给以做了相关demo 具体包括有设计模式demo(设配模式、装饰模式、享元模式)、线程池设计方案、集合类容器demo、io流、Cloneable接口、自定义标签...

Global site tag (gtag.js) - Google Analytics