zoukankan      html  css  js  c++  java
  • Java基础之装饰设计模式

      在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述java基础之装饰设计模式,更多Java专业知识,广州疯狂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==' ')

      continue;

      elseif(ch==' ')

      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()方法。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。高薪从IT名企请来项目经理为学员亲自授课,对学员进行实战教学,在没有工作经验的学员,在疯狂java,通过大量全真经典企业级项目进行集中培训,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

  • 相关阅读:
    初探JavaScript(一)——也谈元素节点、属性节点、文本节点
    解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
    Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
    Hadoop阅读笔记(五)——重返Hadoop目录结构
    Hadoop阅读笔记(四)——一幅图看透MapReduce机制
    可视化(番外篇)——在Eclipse RCP中玩转OpenGL
    可视化(番外篇)——SWT总结
    Hadoop阅读笔记(三)——深入MapReduce排序和单表连接
    探秘Tomcat(一)——Myeclipse中导入Tomcat源码
    osgearth将视点绑定到一个节点上
  • 原文地址:https://www.cnblogs.com/gojava/p/3368583.html
Copyright © 2011-2022 走看看