装饰器模式实现的核心精髓在于套娃,把多态和继承玩出新花样。
每一次装饰都是往原对象身上套一层娃,这个娃可以是蓝色的绿色的,大的,小的。
俄罗斯套娃最里层是核心,你甚至可以不用娃,用其他东西替代。其余每一层的套娃都可以看做一类,作为装饰类。
我们先分析一下套娃是如何套的,再根据套娃的基本思路,来展开装饰器是如何实现的.
套娃的思路:
1.有一个娃准备被套
2.往这个娃上套娃,它变成一个新娃
3.重复2
可以看到,每套上一个娃,它就相当于成为了新的娃,准备被套。
由此引申到装饰器模式,每一次装饰生成一个新的组件,它准备被装饰。
装饰器模式实现思路:
1.有一个组件准备装饰
2.装饰类继承组件,构造传入组件类,利用多态将这个装饰类转换为新组件,直接进行一个娃的套
3.重复2
前述还是有些抽象,下面我们l利用实际例子分析分析,写下代码。
实例:我的手机是荣耀手机,我给这个手机买了钢化膜和手机壳,现在使用代码描述它们的关系。
分析:
我们需要有一个手机类,这个手机是荣耀手机。
而手机可以配上一些配件,如手机壳,钢化膜等。
由此,可以创出五个类:SmarthPhone,HonorPhone,Decorator,PhoneShell,ScreenProtector
package kisaragi.yu.decoratortest;
public abstract class SmartPhone {
abstract String show();
}
package kisaragi.yu.decoratortest;
public class HonorPhone extends SmartPhone {
@Override
String sho