A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是刘通 中级黑马   /  2015-10-9 23:18  /  753 人查看  /  17 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

装饰设计模式
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。所以该装饰类需要继承同一个父类,因为只是功能增强,事物没有变。
MyBufferedReader类使用了装饰设计模式
原因:后期进行功能增强时,不建议改源代码,所以用此设计模式更优化
装饰和继承的区别
以前是通过继承将每一个子类都具备缓冲功能。
那么继承体系会复杂,并不利于扩展。
现在优化思想。单独描述一下缓冲内容。
将需要被缓冲的对象。传递进来。也就是,谁需要被缓冲,谁就作为参数传递给缓冲区。
这样继承体系就变得很简单。优化了体系结构。
装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。所以装饰类和被装饰类通常是都属于一个体系中的。
装饰设计模式将类与类的继承关系变成了组合关系
字节流
想要操作图片数据,就要用到字节流
字节流不需要刷新,因为字符流需要先缓冲数据,然后查表解析,所以需要刷新,而字节流不需要,只需要关闭流资源
字节流下File的读写操作
import java.io.*;  
class  FileStream  
{  
    public static void main(String[] args) throws IOException  
    {  
        readFile_3();  
    }  
  
    public static void readFile_3()throws IOException  
    {  
        FileInputStream fis = new FileInputStream("fos.txt");  
         
//      int num = fis.available();//available方法返回文件中字节数  
        byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。不用在循环了。该方法慎用,当文件数据过大时,会造成内存溢出!!  
  
        fis.read(buf);  
  
        System.out.println(new String(buf));  
  
        fis.close();  
    }  
  
    public static void readFile_2()throws IOException  
    {  
        FileInputStream fis = new FileInputStream("fos.txt");  
  
        byte[] buf = new byte[1024]; //为readFile_1和readFile_3之间的折中方式  
        int len = 0;  
        while((len=fis.read(buf))!=-1)  
        {  
            System.out.println(new String(buf,0,len));  
        }  
  
        fis.close();  
         
    }  
    public static void readFile_1()throws IOException  
    {  
        FileInputStream fis = new FileInputStream("fos.txt");  
  
        int ch = 0;  
  
        while((ch=fis.read())!=-1)//read方法返回的是int型,如果是byte型,可能读到8个1时就结束循环  
        {  
            System.out.println((char)ch);  
        }  
        fis.close();  
    }  
  
    public static void writeFile()throws IOException  
    {  
        FileOutputStream fos = new FileOutputStream("fos.txt");  
         
        fos.write("abcde".getBytes()); //getBytes方法将字符串转换为字节数组  
  
        fos.close();  
    }  
}  

17 个回复

倒序浏览
这个完全没概念!!!!!!!!!
回复 使用道具 举报
接触了单例设计模式以及装饰设计模式。
回复 使用道具 举报
谢谢介绍~~
回复 使用道具 举报
gof23  it二十三式   四人帮!!!!!!!!!
回复 使用道具 举报
太子奕 发表于 2015-10-9 23:29
这个完全没概念!!!!!!!!!

咱们是搞编程的,动手是最给力的概念
回复 使用道具 举报

不谢不谢   咱们都是奋斗的小鸟
回复 使用道具 举报
YaYa 发表于 2015-10-10 04:38
gof23  it二十三式   四人帮!!!!!!!!!

这是什么  啊  哈哈
回复 使用道具 举报
chenguoyu520 发表于 2015-10-9 23:34
接触了单例设计模式以及装饰设计模式。

谢谢你得仔细阅读  谢谢
回复 使用道具 举报
其实黑马的学生都是想靠自己的双手来改变自己现在的现状,都想享受自己的未来,我们必须努力
回复 使用道具 举报
其实黑马的学生都是想靠自己的双手来改变自己现在的现状,都想享受自己的未来,我们必须努力
回复 使用道具 举报
弗人 中级黑马 2015-10-10 09:23:21
12#
装饰模式也考吗?
回复 使用道具 举报
ln0491 中级黑马 2015-10-10 09:49:22
13#
还没看明白。。
回复 使用道具 举报
YaYa 高级黑马 2015-10-10 10:53:07
14#
我是刘通 发表于 2015-10-10 08:29
这是什么  啊  哈哈

gof23全称是 Gang of Four 23   设计模式是外国四个it大牛 整出来的  然后取名为gof23  单例啊  代理啊 什么的 都是设计模式
回复 使用道具 举报
设计模式这个应该不只是基础了吧
回复 使用道具 举报
前来学习学习~
回复 使用道具 举报
学习学习!
回复 使用道具 举报
弗人 发表于 2015-10-10 09:23
装饰模式也考吗?

没事  咱们的未来就是不停的敲代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马