装饰器是指在不改变先有对象结构的情况下,动态地给该对象增加一些职能(即增加其额外功能)的模式。装饰器模式和代理模式我反正是傻傻分不清。
装饰器所要完成功能的示意图:
使用套路:
//一层装饰ExtraFunction extraFunction = new ExtraFunction(new CoreFunction());extraFunction.do();//两层装饰ExtraFunction2 extraFunction2 = new ExtraFunction2(new ExtraFunction(new CoreFunction())();extraFunction2.do();
举个例子(装饰器都是这个套路哟~)
定义一个接口,
Skillpublic interface Skill {void ability();}
JavaSkill是最核心需要掌握的技能public class JavaSkill implements Skill {@Overridepublic void ability() {System.out.println("java ability");}}
为了掌握更多技能,我们不仅要学习Java,还要学习MyBatis。我们先定义一个装饰器
public class DecoratorSkill implements Skill {protected Skill skill;public DecoratorSkill(Skill skill){this.skill = skill;}@Overridepublic void ability() {skill.ability();}}
接着让需要增加附加功能的类继承装饰器类
DecoratorSkill,并增加额外功能public class MyBatisSkill extends DecoratorSkill {public MyBatisSkill(Skill skill) {super(skill);}public void ability() {System.out.println("mybatis ability");this.skill.ability();}}
测试
public class Test {public static void main(String[] args) {MyBatisSkill myBatisSkill = new MyBatisSkill(new JavaSkill());myBatisSkill.ability();}}
参考:
https://www.liaoxuefeng.com/wiki/1252599548343744/1281319302594594
