码迷,mamicode.com
首页 > 其他好文 > 详细

装饰者模式

时间:2015-05-05 10:41:16      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:设计模式   装饰者模式   组合   

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

 

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!