装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰模式有点像烤羊肉串,你可以用一个金属的物体来串各种羊肉串,也可以用竹签来串羊肉串。其中金属物体和竹签就是不同的组件,羊肉、猪肉和鸡肉等就是不同的装饰,我们可以在一个竹签或者金属杆子上按各种顺序串各种肉。
装饰模式的类图如下:
装饰模式的主要关键的关系就是装饰这个对象不仅是组件的子类还和父类有着聚合的关系,正因为这种聚合的关系能够把组件的各个子类串连起来。
装饰模式的另外一个特性是按照构造时候的顺序来调用相应的函数,同时装饰模式能有效地使用聚合模式来代替继承关系,因为继承关系的调用规则也可以按照继承的顺序来调用。
装饰模式和烤羊肉串相似的地方:
1、先获得一个竹签或者金属杆
2、任意顺序串各种肉
3、一般是一定顺序地吃串
在游戏中,如果游戏中有各种任务类型:日常任务、世界任务和国家任务等。可能存在某个NPC特供我们多个任务,但是需要按照某种顺序来展示各种任务的时候我们就可以使用装饰模式。事先按照策划提供的顺序来构造一个装饰链,使用的时候就可以按照先前提供的顺序来展示给客户端了。
这个案例中我们先获得一个竹签就是NPC(不是玩家),同时任务的种类和顺序随着时间的流逝经常会发生变化,每个npc构造的顺序可能不是相同的,提供给客户端的信息都是有顺序的。