装饰设计模式
当想对已有的对象进行功能增强时,可以自定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的类成为装饰类
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
继承与装饰的区别
当一个抽象类有很多的子类,需要为每个子类都增强一些功能时,
如果为每一个子类都定义一个子类,会使继承体系变的相当复杂,而且不利于扩展
而如果是用装饰类的话,可以单独定义一个功能增强装饰类,将需要增强功能的子类传递进来就可以了,简化了继承体系
装饰类比继承更灵活,降低了类与类之间的关系
装饰类通常与被装饰类属于一个体系
自定义一个字符缓冲流:
class MyBufferedReader extends Reader
{
Reader r;
public MyBufferedReader(Reader r)
{
this.r=r;
}
public String MyreadLine() throws IOException
{
StringBuilder s = new StringBuilder();
int c;
while((c=r.read())!=-1)
{
if(c=='\r')
continue;
if(c=='\n')
return s.toString();
s.append((char)c);
}
if(s.length()!=0)
return s.toString();
return null;
}
public void myclose() throws IOException
{
r.close();
}
@Override
public void close() throws IOException {
r.close();
}
@Override
public int read(char[] arg0, int arg1, int arg2) throws IOException {
return r.read(arg0, arg1, arg2);
}
}