动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。
总结:创建类的装饰类,对被装饰类增强功能。装饰模式是继承的一个替代模式。
public class Decorator{
public static void main(String[] args){
Animals dog = new AnimalsDecorator(new Dog());
dog.run();
}
}
interface Animals{
public void run();
}
//被装饰类
class Dog implements Animals{
@Override
public void run(){
System.out.println("dog run!");
}
}
//装饰类
class AnimalsDecorator implements Animals{
private Animals animals;
//动态装饰,参数为Animals接口,传入什么实现就装饰什么实现
//继承不能做到这一点,继承的功能是静态的,不能动态增删
public AnimalsDecorator(Animals animals){
this.animals = animals;
}
//装饰run()方法
@Override
public void run(){
animals.run();
System.out.println("fast!");
}
}