装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比集成更有弹性的代替方案。
设计原则

  • 类应该对扩展开放,对修改关闭

举例说明
场景:在不修改现有代码的情况下,给对象搭配新的行为。
具体需求:英雄作战时,会受到敌方英雄各种各样的技能攻击,相应的英雄生命值逐渐降低。请设计一个可扩展的程序,来计算当前英雄受到攻击后的当前生命值,最好描述出英雄所受到的伤害。

  1. 抽象出一个基础组件(Hero)
/**
* 基础组件类
* @author: jsk
* @date: 2019/5/12 17:24
*/
public interface Hero {/*** 生命值* @return*/Integer healthPoint();String description();
}
  1. 抽象出一个实现基础组件装饰者类
/*** @author: jsk* @date: 2019/5/12 17:39*/
public abstract class AbstractEnemyHero implements Hero {/*** 攻击对象*/Hero targetHero;
}
  1. 分别实现以上两个抽象
    3.1 实现基础组件类

    /*** @author: jsk* @date: 2019/5/12 17:30*/
    public class Galen implements Hero {@Overridepublic Integer healthPoint() {return 3000;}@Overridepublic String description() {return "我是盖伦";}
    }
    

    3.2实现装饰者类

    /*** 寒冰射手* @author: jsk* @date: 2019/5/12 17:41*/
    public class Ashe extends AbstractEnemyHero {public Ashe(Hero hero) {this.targetHero = hero;}@Overridepublic Integer healthPoint() {return targetHero.healthPoint() - 90;}@Overridepublic String description() {return targetHero.description() + ", 受到寒冰的普通攻击";}
    }
    
    /*** 卡特琳娜** @author: jsk* @date: 2019/5/12 17:52*/
    public class Catalina extends AbstractEnemyHero {public Catalina(Hero hero) {this.targetHero = hero;}@Overridepublic Integer healthPoint() {return targetHero.healthPoint() - 110;}@Overridepublic String description() {return targetHero.description() + ", 受到卡特飞镖的攻击";}
    }
    

4.程序运行

/*** @author: jsk* @date: 2019/5/12 17:53*/
public class Main {public static void main(String[] args) {// 创建一个盖伦Galen galen = new Galen();// 经过艾希的装饰(攻击)Ashe ashe = new Ashe(galen);// 经过卡特的装饰(攻击)Catalina catalina = new Catalina(ashe);System.out.println(catalina.description());System.out.println("目前总生命值:" + catalina.healthPoint());}
}

运行结果

/

装饰者设计模式:盖伦所受到的伤害值相关推荐

  1. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

  2. lambda设计模式_使用lambda的装饰器设计模式

    lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...

  3. 装饰着模式示例_装饰器设计模式示例

    装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...

  4. Java中的装饰器设计模式

    装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模式的UML表示开始: Con ...

  5. 装饰器设计模式的应用

    嗨,您好! 今天,我将展示装饰设计模式的实际应用. 装饰器设计模式是一种广泛使用的设计模式,同时在运行期间处理图形,树木和动态更改. 如果您正在寻找或尝试进行递归,这也是一个不错的选择. 我喜欢它. ...

  6. 用装饰器设计模式装饰

    装饰图案是广泛使用的结构图案之一. 此模式在运行时动态更改对象的功能,而不会影响对象的现有功能. 简而言之,此模式通过包装将附加功能添加到对象. 问题陈述: 想像一下我们有一个比萨饼,该比萨饼已经用番 ...

  7. 机器人蛮王_盖伦:吊打我老婆,蛮王:我也是,他:被老婆打的不敢出塔

    相遇就是缘分,你点开了我的文章,小编感到万分荣幸,感谢各位朋友.既然看到了我的文章,就说明我们还是有缘,希望大家可以帮我点点左上角的蓝色字体,小编给大家鞠躬了! LOL如此好玩的原因,其实不光光是游戏 ...

  8. 结构设计模式 - 装饰器设计模式

    结构设计模式 - 装饰设计模式 装饰器设计模式用于在运行时修改对象的功能.同时,同一类的其他实例不会受此影响,因此单个对象将获得已修改的行为.装饰器设计模式是结构设计模式之一(如Adapter Pat ...

  9. 第 11 章 装饰者设计模式

    第 11 章 装饰者设计模式 1.星巴克咖啡订单项目 星巴克咖啡订单项目(咖啡馆) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡). ShortBlack. LongBlack(美式咖啡). D ...

最新文章

  1. idea svn的项目无法标识修改新增的类_是时候让你的 IDEA 飞起来啦!
  2. J2EE dynamic web工程搭建 struts2
  3. 学习笔记02:直播串讲02
  4. java 创建者设计模式_Java设计模式之创建者模式分享热爱编程,程序人生
  5. rxjs处理http请求超时
  6. python机器学习:决策树ID3、C4.5
  7. 【Luogu3932】浮游大陆的68号岛(前缀和)
  8. 数据中台对企业意义和作用有哪些
  9. android获取inflater
  10. win10 3dmax 激活后反复激活和激活码无效问题
  11. 计算机培训三下乡实践报告,大学生暑假三下乡社会实践报告优秀范文
  12. trajan 塔杨算法 求割点,割边
  13. 【修炼五】用户需求系统需求
  14. 问题 F: 解救小哈
  15. java批量添加注解到所有业务接口
  16. 自动化运维工具Ansible(2)ad-hoc
  17. 数字图像处理(3) — 基于白平衡的人脸美白算法
  18. php获取当前日期所在自然周周一周末以及前后自然周始末
  19. 我的不靠谱择业[饮水思源feeling]
  20. JAVA实现简单的客户选购系统

热门文章

  1. Ghost每个功能详细解释
  2. 如何重装电脑自带的正版office2016家庭学生版
  3. L9362_四通道低侧驱动器
  4. 可可西里从来不是诗意的远方
  5. cad中英文翻译插件使用
  6. QQ个人资料模块100条测试用例
  7. python抠出图片人像_Python+Paddlehub相片人像抠图精简源码实例
  8. 一个苦逼次世代游戏建模师的内心独白,请在家长的陪同下阅读
  9. Java即时通讯(IM)——陌生人交友了解
  10. 程序员为什么要学习数据结构与算法?