/**
* 解决什么问题?
* 允许向一个现有的对象添加新的功能,同时又不改变其结构;
*
* 如何解决?
* 1、继承
* 使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法;
* ***缺点:
* 但是这种方法是静态的,用户不能控制 增加行为的方式和时机;
*
* 2、关联
* 将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,这个嵌入的对象为装饰器(Decorator);
* ***优点:
* 不需要创建很多子类;
* 更灵活的控制对象的行为;
*
* 如何实现:
* Component:
* 一个接口或者抽象类;
* 装饰者和被装饰者 共同的父类;
* 定义基本行为;
*
* ConcreteComponent:
* 实现类;
* 被装饰者;
*
* Decorator:
* 抽象类,实现Component;
* 所有装饰器的抽象父类;
* 属性 指向 ConcreteComponent;
*
* ConcreteDecorator:
* 具体的装饰对象;
* 实现具体 对被装饰对象添加的功能;
*
* ***装饰者和被装饰者对象有相同的父类,因为装饰者和被装饰者必须是一样的类型,这里利用继承是为了达到类型匹配,而不是利用继承获得行为;
*/