# 装饰模式

# 概念:

​ 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。是继承的一种替代方案。

# 解决问题:

​ 一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。

# 何时使用:

不想增加很多子类的情况下扩展类。

# 特点:

​ 优点

​ 装饰类与被装饰类可以独立发展,不会相互耦合,是继承的一种替代模式,可以动态扩展一个实现类的功能。

​ 缺点

​ 多层装饰比较复杂。

# 应用场景:

​ 扩展一个类的功能。

​ 动态增加功能、删除功能。

# 编码实现:

/**
 * @title : 装饰模式 Decorative 。
 */

// 被装饰类
class Parent {
	name = '张三';
	height = 170;
};

// 装饰类
class ParentDecorator {
	constructor(decorator) {
		this.name = decorator.name;
		this.height = decorator.height;
	}

	age = 25;
	sex = '男';
};

const parent = new Parent();

const parentDecorator = new ParentDecorator(parent);
console.log(parentDecorator.name);