黑马程序员——JAVA笔记——装饰设计模式

来源:互联网 发布:360网页广告拦截软件 编辑:程序博客网 时间:2024/06/05 09:39

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

装饰设计模式:

当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有对象的功能,并提供加强功能。

那么自定义的该类就称为装饰类。

装饰类通常会通过构造方法接受被装饰的对象。

并基于被装饰的对象的功能,提供更强的功能。


例:

class Demo{public static void main(String[] args) throws IOException{Person p=new Person();//p.chifan();SuperPerson sp=new SuperPerson(p);sp.superchifan();}}class Person{public void chifan(){System.out.println("吃饭");}}class SuperPerson{private Person p;SuperPerson(Person p){this.p=p;}public void superchifan(){System.out.println("开胃酒");p.chifan();System.out.println("甜点");}}
上面代码中的SuperPerson类就是Person的装饰类。

下面在举个例子。

MyReader专门用于读取数据的类
|--MyTestReader
|--MyBufferedTextReader
|--MyMediaReader
|--MyBufferedMediaReader
|--MyDataReader
|--MyBufferedDataReader

class MyBufferedReader extends MyReader
{
MyBufferedReader(MyTextReader mtr)
{}
MyBufferedReader(MydMediaReader mmr)
{}
}

上面这个类扩展性很差。
找到其参数的共同类型。通过多台的形式,可以提高扩展性。

class MyBufferedReader
{
privaet MyReader mr;
MyBufferedReader(MyReader mr)
{
this.mr=mr;
}
}

MyReader//专门用于读取数据的类
|--MyTestReader
|--MyMediaReader
|--MyDataReader
|--MyBufferedReader

装饰模式比继承要灵活,避免了继承体系的臃肿。
而且降低了类与类之间的关系。

装饰类因为是增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的功能。
所以装饰类和被装饰类通常都是属于一个体系中。

0 0