装饰者模式

装饰者模式定义:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

 

大白话版:包装对象增强其功能,典型应用为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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值