其实就是一个类包装一个类传递来的对象实现
https://www.cnblogs.com/jzb-blog/p/6717349.html
1.抽象构件
/**
* 定义作为人类应有的一些规范
*/
public interface Human {
void eating();
}
2.具体构件
/**
* 具体构件类
*/
public class Man implements Human{
@Override
public void eating() {
System.out.println("吃刚刚捕获的美味佳肴");
}
}
3.抽象装饰类 (3,4可合并,4多此一举)
/**
* 抽象装饰者,需要实现抽象构件接口
*/
public abstract class Decorator implements Human{
//维持对抽象构件的引用
private Human human;
//注入构件实例
public Decorator(Human human) {
this.human = human;
}
@Override
public void eating() {
human.eating();
}
}
注意: 在Decorator中并未真正实现eat()方法,而只是调用原有Human对象的eating()方法,它没有真正实施装饰,而是提供一个统一的接口,将具体装饰过程交给子类完成。
4.具体装饰类
public class ConcreteDecorator extends Decorator {
public ConcreteDecorator(Human human){
super(human);
}
@Override
public void eating() {
System.out.println("把捕捉的动物给烤熟了,在加些配料");
super.eating();
System.out.println("吃完饭之后洗手");
}
//需要增加的其他方法
}
5.测试类
public class Demo {
public static void main(String[] args){
Human man = new Man();
//没进行装饰之前
man.eating();
System.out.println("--------------------");
//进行装饰之后
man = new ConcreteDecorator(man);
man.eating();
}
}