关键点:实现同一接口
废话不多说,直接上图!
package decorator;
/**
* @DESCRIPTION:
* @Author: WangLt
* @Date: 2020/4/11
*/
public class Test {
public static void main(String[] args) {
People p1 = new WearShoes(new WearTshirt(new Person("小明")));
p1.wear();
People p2 = new WearTshirt(new WearShoes(new Person("小刚")));
p2.wear();
}
}
- 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。就增加功能来说,Decorator模式比生成子类更为灵活。
类图结构:
装饰者模式中类或接口的作用:
抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(ConcreteComponent)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰(ConcreteDecorator)角色:负责给构件对象“贴上”附加的责任。