装饰者模式定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
大白话版:包装对象增强其功能,典型应用为JAVA的Stream。概念图:
其中外面一层类是对内部类的扩展。
例:
游戏中玩家可通过冶炼升级自己的武器。每次升级后,武器对角色的增益将提高。这里可以通过装饰者模式,对武器系统类进行设计。
假设武器只有剑sword和弓arrow,武器等级从低到高分别为白色White、绿色Green和紫色Purple,不同等级对武器的基础能力增益不同,如何设计这些类?
通过装饰者模式,将武器weapon设为抽象类(抽象构建),剑sword(具体构件)和弓arrow(具体构件)为继承weapon的具体子类。再设计一个冶炼(抽象装饰者)接口,以及implement了该接口的白色装备,绿色装备,紫色装备和黑色装备(具体装饰者)。设计结果如下:
以获取武器的攻击力为例,假设白色、绿色和紫色的增幅分别为10%,50%,100%,则WhiteWeapon中getAttack返回值为:weapon.getAttackVal*1.1,GreenWeapon中getAttack返回值为weapon.getAttack*1.5,PurpleWeapon中getAttack返回值为weapon.getAttack*2.0。
这种通过将Weapon组合入WeaponDecorator,利用Weapon中的getAttackVal在ColorWeapon中生成新的getAttackVal的设计模式,就是装饰者模式
转载请注明出处:http://blog.csdn.net/miaoyunzexiaobao
原文地址:http://blog.csdn.net/miaoyunzexiaobao/article/details/45498601