- 定义:动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更灵活
- 给已有的功能动态添加更多功能的一种方式
- 当系统需要新的功能时,时想旧的类中添加新的代码,这些新的代码主要装饰了新的功能或者核心职责
- 在主类中添加新的代码,新的属性或者新的逻辑,从而添加的主类的复杂度
- 装饰模式提供了一个非常好的解决方案,它吧每个要装饰的功能放在,并让这个类包装它所要装饰的对象,因此在需要装饰特殊行为时,客户代码就可以根据需要选择,按照顺序的使用装饰了功能的对象
- 吧类中装饰功能从类中搬移去除,这样可以简化原有的类
- 有效的当类的核心职责与装饰功能区分开,从而可以去除类中重复装饰逻辑
组件类(Component) Person.Class
public interface Person {
void eat();
}
具体组件类(ConcreteComponent) Man.Class
public class Man implements Person {
@Override
public void eat() {
System.out.println("男人再吃");
}
}
装饰类(Decorator) Decorator.Class
public abstract class Decorator implements Person{
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
public void eat() {
person.eat();
}
}
具体装饰类(ConcreteDecrator) ManDecorator.Class
public class ManDecoratorA extends Decorator {
@Override
public void eat() {
super.eat();
reEat();
System.out.println("ManDecoratorA类");
}
public void reEat() {
System.out.println("再吃一顿饭");
}
}
具体装饰类B(ConcreteDecortor) ManDecorator.Class
public class ManDecoratorB extends Decorator {
@Override
public void eat() {
super.eat();
reEat();
}
private void reEat() throws RuntimeException{
System.out.println("==========");
System.out.println("ManDecoratorB");
}
}