设计模式——装饰设计模式

编程入门 行业动态 更新时间:2024-10-10 09:20:41

设计<a href=https://www.elefans.com/category/jswz/34/1771241.html style=模式——装饰设计模式"/>

设计模式——装饰设计模式

装饰设计模式

1.意义

1.1 意义:当想要对已有的对象进行功能增强时,可以自定义类,将已有对象传入,基于已有功能提供加强功能,那么自定义类称为装饰类

1.2 装饰相比继承的好处

<1>.继承思想实现增强类的过程如下:

MyReader =>专门用于读取数据的类

    |--MyTextReader

          |--MyBufferedTextReader

    |--MyMediaReader

          |--MyBufferedMediaReader

    |--MyDataReader

          |--MyBufferedDataReader

这是继承思想解决增强类的方法,当后期随着体系子类的逐渐增多,增强类也会随之增多,体系会越来越臃肿不堪

<2>.装饰设计思想实现增强类的过程如下:

MyReader =>专门用于读取数据的类

    |--MyTextReader

    |--MyMediaReader

    |--MyDataReader

    |--MyBufferedReader

这样设计整个体系轻松易懂,装饰模式比继承要灵活,避免了继承体系的臃肿

1.3 特点:装饰类属于增强类,具备的功能与已有对象相同,只不过提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系中,会继承体系的超累

1.4 注意:继承一个体系后,体系父类有抽象方法,装饰类复写抽象方法时,如果体系子类有实现的话,可以通过体系的子类来复写该方法

1.5 事实:装饰设计模式是把继承结构变成了组合结构

2.装饰类实现代码演示

class MyBufferedReader extends Reader   
{    private Reader r;    MyBufferedReader(Reader r){    this.r = r;    }    //可以每次读取一行的方法    public String myReadLine()throws IOException{    //原缓冲区是用的字符数组,这里为了方便用了StringBuilder    StringBuilder sb = new StringBuilder();    int ch;    while((ch=r.read())!=-1){    if(ch=='\r')    continue;    else if(ch=='\n')    return sb.toString();    else    sb.append((char)ch);    }    //当最后一行没有回车时不加下边语句,最后一行不会返回    if(sb.length()!=0)    return sb.toString();    return null;    }    //父类的抽象方法。必须实现public void close()throws IOException{r.close();}//父类的抽象方法,必须实现public int read(char[] cbuf, int off, int len)throws IOException{return r.read(cbuf,off,len);//通过传入的体系子类来复写该方法}
}

更多推荐

设计模式——装饰设计模式

本文发布于:2024-02-26 02:59:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701141.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模式   装饰设计

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!