【应用】
一个父类,一个真实的子类,一个装修子类
装饰子类还有多个子类
父类->装饰子类->装饰子子类
调用时:
父类有个装饰子类属性,装饰子子类中用 用真实对象调用父类接口,并增加新的方法。
【理解】
目的是为了不改变某个类的文件时增加新的的方法,使用一个新的对象包含原来的对象,新的对象接口和原来的相同,外部调用时,用新的类替换老的对象,调用接口不变,同时新的对象就可以增加新的方法和属性了。
最简单情况就是继承,一个父类,一个子类,子类重写父类方法并用super调用方法,并增加新的功能。
在此基础上,为了多态化子类,则生成多个子子类,每个子子类都有不同的功能。
在上面的基础上,父类可以有多个真实子类,此时就不能在super调用了,则需要在装饰类类中持父类对象,装饰子子类中重写的方法中,用持有的这个对象调用相同方法,同时可以添加新的方法。
装饰类和真实类要求接口相同,所以一般抽出一个父类,让装饰类和真实类都继承父类。
装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。