设计模式-装饰设计模式

装饰设计模式:当需要对某些类功能进行增强时,可以把这个类的对象传到自定义类中,然后利用此对象具备的方法在此基础之上进行功能的增强。

与继承的区别:扩展性强一些

例如:有Reader类,我们可以读取text,读取meidia,一个继承体系形成如下:

Reader

|-TextReader

|-MediaReader

若继承来扩展功能的话,则会形成如下的继承体系

Reader

|-TextReader

  |-BufferTextReader

|-MediaReader

  |-BufferMediaReader

但是上面的BufferTextReader和BufferMediaReader都是缓冲的功能,若利用装饰类加上多态机制的话这样可以相称如下的体系

Reader

|-TextReader

|-MediaReader

|-BufferReader

这样区别就显示出来了
*装饰类可以避免继承的臃肿体系,减少代码的冗余度

*装饰类一般为了增强某个类的功能,和这个类一般属于同一体系

装饰类代码举例import java.io.*;class MyBufferedReader

{
    private FileReader fileReader;

    public MyBufferedReader(FileReader fileReader)
    {
        this.fileReader = fileReader;
    }

    public String MyReadLine()throws IOException
    {
        StringBuilder sb = new StringBuilder();

        int readNum = 0;
        while((readNum = fileReader.read()) != -1)
        {
            char readChar = (char)readNum;
       if(readChar == '\r')
         continue;
if(readChar =='\n') return sb.toString(); else sb.append(readChar); }      if(sb.length() != 0)//为了防止文件最后的一行没有回车,这样便会导致最后一行未返回
         return sb.toString();
return null; } }

 此处说明:\r与\n的区别

\r:确切意思是return,即返回到当前行的第一列即开头

\n:确切意思应是新的一行,即类似回车

\r\n:在windows中\n的另一种形式

posted @ 2014-09-29 09:53  风痕影默  阅读(176)  评论(0编辑  收藏  举报
友情链接:极限BT