一、装饰者模式
装饰者模式又称为包装模式。
动态地给一个对象增加新的职责。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
装饰者模式顾名思义就是对一个对象进行装饰,具体怎样装饰呢?那就是给这个对象不断的增加职责方法。给一个对象增加方法不简单啊,用继承或者直接在对象的类中增加方法。如果我们要对自己的手机进行装饰,今天给手机增加一个挂件,明天给手机贴膜,下个月给手机增加一个保护套,后面说不定还要给手机在装扮一下...。这种场景下,我们直接用在对象的类中增加方法,后面我们会发现这样改下去,不仅这个类很庞大,而且改一处好多地方都要动。最重要的一点这样的修改违反了开放——封闭原则。
二、装饰者模式UML图
1.装饰者模式的职责角色:
1)
给出一个抽象的接口,以规范准备接受附加责任的对象。可以理解为要被装饰的抽象对象。
2)
定义一个将要接受附加责任的类。可以理解为要被装饰的具体对象。
3)
持有一个抽象构建(Component)角色的引用,并定义一个与抽象构件一致的接口。
4)
负责给构建对象“贴上”附加的责任。
2 UML图:
我以手机增加挂件装饰为例,讲解装饰者模式。如下UML图所示,手机是我们要装饰的抽象对象,具体的手机装饰对象为:ApplePhone和HTCPhone。装饰的物品为卡通挂件和金属挂件。
三、代码实现
1.抽象构建角色接口定义:
2 具体的构建角色:
3 装饰角色:
4 具体的装饰:
5 客户端调用:
装饰者模式到此讲解完了,这样一来我们后面要给手机增加别的装饰品或者增加别的品牌手机时,只需实现相应的接口。从而可以动态的增加挂件或者手机类型。如果大家有什么见解,欢迎讨论!