- 允许向一个现有的对象添加新的功能,同时又不改变其结构
- 创建一个装饰类,包装原有的类,并在保持类方法签名完整性的前提下,提供额外功能
- 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活
- 装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能
- 继承加组合
- 静态代理和装饰者模式的实现过程本质上没什么区别
- 装饰者模式只是为了增强原对象的方法;而代理模式主要是为了控制对象的访问
package com.nike.erick.decorator;
public class Test {
public static void main(String[] args) {
BigDog bigDog = new BigDog(new Dog());
bigDog.eat();
}
}
interface Animal {
void eat();
}
class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
class BigDog implements Animal {
private Dog dog;
public BigDog(Dog dog) {
this.dog = dog;
}
@Override
public void eat() {
beforeEat();
dog.eat();
}
private void beforeEat() {
System.out.println("先给狗狗洗个澡");
}
}