结构型模式之装饰

定义:

    用于在运行时修改或者扩展实例的行为。即对某一个对象的行为进行扩展,而不是对某一类对象的行为进行扩展(针对类的所有对象可以采用继承的方式)

优势:

    通过使用装饰模式,我们可以对某个类的某一个对象进行动态扩展。而不会影响该类的其他实例。

    而采用继承的方式会直接为类增加功能,导致子类数量膨胀。

   装饰模式不改变原类文件、不使用继承、可以动态地扩展类功能

UML类图:

结构型模式之装饰_第1张图片
1

代码实现:

    我们通过房子来描述这个装饰的过程

    1:盖一栋基本的房子

    2:给外墙上色

    3:安装家灯

待装饰的父接口:

结构型模式之装饰_第2张图片
1

    被装饰的具体对象:

结构型模式之装饰_第3张图片
2

装饰者抽象类:

结构型模式之装饰_第4张图片
3

具体的装饰者一:房屋刷颜色

结构型模式之装饰_第5张图片
4

具体的装饰者二:房屋装灯

结构型模式之装饰_第6张图片
5

测试类:

结构型模式之装饰_第7张图片
6

结果:

结构型模式之装饰_第8张图片
7

结语:

    可以发现,其实装饰者就是一个被装饰者,装饰的过程其实就是拿到被装饰者的实例引用,用装饰者改变被装饰者的行为或者扩展它的功能的过程。

记住该模式的重点是:运行时动态变化

提问:

继承与装饰者模式的区别?为什么不能用继承来增加被装饰者想要的功能呢?

1:继承的形式,需要子类继承我们的被装饰类,通过添加房子的子类来添加特定的颜色或者装饰灯。但是如果我们想要添加各种各样的颜色和装饰灯呢?就必须在房屋代码编写时就定义好各种各样的子类(如红色房屋,黄色房屋,绿色房屋,大灯房屋,小灯房屋...),而装饰模式并不需要逐个创建子类房屋,而是在运行时将需要装饰的房屋子类与特定装饰类联系即可。即:

运行时为独立对象装饰新的功能

你可能感兴趣的:(结构型模式之装饰)