A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

装饰类和继承应用中的说明

举例说明:
继承体系:
MyReader//专门用于读取数据的类。
    |--MyTextReader
         |--MyBufferedTextReader
    |--MyMediaReader
         |--MyBufferedMediaReader
    |--MyDaraReader
         |--MyBufferedDataReader
         
class  MyBufferedReader{
     MyBufferedReader(MyTextReader text){
     
     }
     MyBufferedReader(MyMediaReader text){
     
     }
}
上面这个类扩展性很差。
找到其参数的共同类型。通过多态的形式,可以提高扩展性。

class MyBufferedReader{
    private MyReader r;
    MyBufferedReader(MyReader r){
   
    }
}

对上面的继承体系开始优化:(优化后,这个就是装饰体系)
     |--MyTextReader
     |--MyMediaReader
     |--MyDaraReader
     |--MyBufferedReader
     
装饰模式比继承灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。

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

建议:在开发中继承要写共同抽取出来的,可是继承不要写的过多,不要以继承为主,因为继承要是
以几个功能产生子类的话,体系会非常臃肿的,可以通过装饰的方式扩张这些类的功能。装饰设计的灵
活性体现,比如:之前定义了一个类中的几个功能,后来认为功能不够用了,想要增加几个新的功能模
块,在使用装饰的过程中,我只需要把之前的那个需要被装饰的类传到装饰的类中,即可完成功能模块的
扩展。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马