什么是装饰模式
看了老半天Decoration模式还是没看懂,后面看具体实现再去看UML图的时候突然恍然大悟。
首先,我们要先确定这个设计模式中有什么角色,有什么作用。
第一当然需要被装饰的类了,比如说有一个Component抽象类,然后又有一个ConcreateComponent实现类,这个具体的Component类就是具体我们需要装饰的类。
既然是装饰模式,当然需要装饰的类了,和其他设计模式一样,我们面向抽象编程,首先这个装饰的类我们先定义一个抽象的类AbstractDecoration,它继承了Component抽象类,这时候它就可以去重写Component类中需要被包装增强的方法了,并且它还拥有一个Component字段,我们只需要将Component(需要被包装的类)放入它的构造方法中,然后这个包装类重写被包装类的某个需要被包装的方法。
之后我们可以新增一些具体实现的包装类,比如MusicDecoration类,我们需要在包装方法前调用听音乐,我们这个MusicDecoration就可以新增一个listenMusic方法,并且在重写方法前添上这个方法的调用在调用字段的需要被包装方法前。
1 | // 重写打电话的方法 |
当我们需要在包装方法后面添加一个吃饭的方法,我们可以新增一个具体实现类EatDecoration类并且重写call方法。
1 | // 重写打电话的方法 |
这时候我们就可以这样创建一个对象,并且调用。
1 | Phone phone = new EatDecoration(new MusicDecoration(new ConcreateComponent())); |