一、UML图
Component:一个接口或是抽象类,就是定义我们最核心的对象,也就是最原始的对象。
ConretetComponent类:具体构件,通过继承实现Component抽象类中的抽象方法。是最核心、最原始、最基本的接口或抽象类的实现,我们要装饰的就是它。
Decorator:装饰类,其拥有一个指向Component的private变量。
ConcreteDecorator:具体实现类
二、实例
1、Component
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public abstract class Human {
public abstract void dress();
}
2、ConretetComponent
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class Man extends Human {
@Override
public void dress() {
System.out.println("我是男人");
}
}
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class Woman extends Human {
@Override
public void dress() {
System.out.println("我是女人");
}
}
3、Decorator
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class Finery extends Human {
protected Human human = null;
public void decorate(Human human){
this.human = human;
}
@Override
public void dress() {
if (null != this.human){
this.human.dress();
}
}
}
4、ConcreteDecorator
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class TShirt extends Finery {
@Override
public void dress() {
super.dress();
System.out.println("穿一件T恤衫");
}
}
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class SportShoes extends Finery {
@Override
public void dress() {
super.dress();
System.out.println("穿一双运动鞋");
}
}
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class Jacket extends Finery {
@Override
public void dress() {
super.dress();
System.out.println("穿一件夹克");
}
}
5、main
package com.designPattern.decorator;
/**
* Created by ZhangJintao on 2020/3/8.
*/
public class main {
public static void main(String[] args) {
Man xiaoZhang = new Man();
TShirt tShirt = new TShirt();
Jacket jacket = new Jacket();
tShirt.decorate(xiaoZhang);
jacket.decorate(tShirt);
jacket.dress();
}
}