java 中设计模式(装饰设计模式)的实例详解

应用场景:

在不对原有对象类进行修改的基础上,给一个或多个已有的类对象提供增强额外的功能.

我觉得可以从字面理解,装饰,装饰房子。房子可以看成原有的类。等于你把一个已经建好的房子按照自己的想法再装饰一遍。继承也可以实现这样的功能,但是继承有它的缺点,继承只是单一继承。装饰设计模式可以取多个不同的类的不同功能。

具体步骤:

◎第1步:通过构造传参把需要加强的类传过来。(你要装修房子,肯定的先有房子吧。这个很好理解)

◎第2步:把具体需要增强的功能写了

具体例子及代码

写一个MyBufferedReader类,使它能够对字符流(如FileReader、InputStreamReader和PipedReader等)进行功能增强:

(1) 提供带缓冲的myRead()方法,对原有的read()方法进行增速;

(2)提供一个能够每次读取一行字符的myReadLine()方法。

import java.io.FileReader;

import java.io.IOException;

/**

* * 版本2: 增强FileReader类,使它具有如下功能:

* (1) 提供带缓冲的myRead()方法,对原有的read()方法进行增速;

(2)提供一个能够每次读取一行字符的myReadLine()方法。

*/

public class MyBufferedReader {

private char[] cbuf= new char[1024];//缓存

private int pos=0; //当前读取的位置

private int count=0;//记录缓存中当前的字符总数

//封装一个FileReader对象,帮助我们实现从文件中读取一批数据

private FileReader r = null;

public MyBufferedReader(FileReader r) {

super();

this.r = r;

}

/**

* 从缓存中读取一个字符数据返回

* @throws IOException

* @return所读取的字符,如果到达文件末尾则返回-1

*/

public int myRead() throws IOException{

//从文件中把数据读取到缓存buf[]中

if(count<=0){

//System.out.println("**********");

count = r.read(cbuf);

if(count==-1){

return -1;

}

pos=0;

}

char ch = cbuf[pos];

pos++;

count--;

return ch;

}

//回车字符: \r 13

//换行字符: \n 10

public String myReadLine() throws IOException{

StringBuilder sb=new StringBuilder();

int ch=0;

//有回车换行符部分

while( (ch=myRead())!=-1){

if(ch=='\r'){

continue;

}

if(ch=='\n'){

return sb.toString();

}

sb.append((char)ch);

}

if(sb.length()!=0){//最后一行(没有回车换行符)

return sb.toString();

}

return null;//最后或空文件

}

public void close() throws IOException{

r.close();

}

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

装饰模式实例+java,java 中设计模式(装饰设计模式)的实例详解相关推荐

  1. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

  2. Java23中设计模式(Design Patterns)详解

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...

  3. Java基础学习总结(37)——Java23中设计模式(Design Patterns)详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. Java 11中的新功能和API详解系列1

    Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...

  5. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  6. java的数组与Arrays类源码详解

    java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...

  7. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  8. Java: static,final,代码块 的详解

    Java: static,final,代码块 的详解 每博一文案 山本文绪说过这样一句话:哪些决定放弃了的事,就请放弃得干干净净.哪些决定再也不见面的人,就真 的不要再见面了,不要再做背叛自己的事,如 ...

  9. Java网络编程(6)NIO - Channel详解

    前言 NIO的三个核心组件:Buffer.Channel.Selector Java网络编程(4)NIO的理解与NIO的三个组件完成了大概的了解 Java网络编程(5)NIO - Buffer详解详细 ...

  10. java中sleep()、wait()相同与不同详解

    java中sleep().wait()相同与不同详解 相同 java中Thread#sleep和Object#wait方法都是暂停当前线程,当前线程让出CPU占用.并不存在调用sleep后还占用CPU ...

最新文章

  1. leetcode算法题--滑动窗口的最大值
  2. 功能、资源权限管理的设计
  3. mysql在线搭建从库_Mysql主从库搭建
  4. Struts2中通过Ajax传递json数据
  5. java 字符串转dom对象_xml类型的字符串转换为Dom对象
  6. 立即表达式的多种写法与注意点以及in操作符的作用
  7. pythonrsv分割_大数据经验
  8. 数据在数组中存储的顺序:小端 OR 大端模式 详解
  9. 终止正在运行的VBS脚本
  10. CR, LF, CR/LF 回车 换行
  11. 长时间佩戴蓝牙耳机哪个款式好用?这几款半入耳式佩戴稳定舒适,不要错过
  12. 视差图(disparity map)
  13. 看得见的数据结构Android版之二分搜索树篇
  14. 三星android pie更新,三星Android Pie更新路线图公布 Galaxy Note9需等明年二月
  15. 计算机中的图表类型,高级会计师《职称计算机》图表制作:主要常用图表类型...
  16. 8421码、5421码、2421码、余三码
  17. 解决Android Studio连接不上逍遥模拟器的问题
  18. 等级保护二、三、四级内容及对比
  19. Android适配全面屏
  20. 目前最好用的洞洞板布线软件LochMaster-ver.4.0

热门文章

  1. oracle 判断为空赋一个值_求高手帮忙,oracle查出的值为null,怎么赋初始值?
  2. python 读取access_python读取数据access出错
  3. 书生浏览器不能打开这个文件或者url_这些浏览器工作原理你都吃透了吗?
  4. EasyUI:导出datagrid数据到桌面
  5. 理解WebSocket心跳及重连机制以及加强版的reconnectingwebsocket.js实现
  6. 用欧拉角表示旋转(方位)heading pitch bank 含义,形象的图示
  7. 线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )
  8. 论文阅读-为什么深度卷积神经网络对小目标的变换泛化效果很差?
  9. 笔记四:onsubmit和onclick的区别
  10. JavaScript基础1