装饰类和继承应用中的说明
举例说明:
继承体系:
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
装饰模式比继承灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰了通常都是属于一个体系中的。
建议:在开发中继承要写共同抽取出来的,可是继承不要写的过多,不要以继承为主,因为继承要是
以几个功能产生子类的话,体系会非常臃肿的,可以通过装饰的方式扩张这些类的功能。装饰设计的灵
活性体现,比如:之前定义了一个类中的几个功能,后来认为功能不够用了,想要增加几个新的功能模
块,在使用装饰的过程中,我只需要把之前的那个需要被装饰的类传到装饰的类中,即可完成功能模块的
扩展。 |
|