继续学习设计模式
参考鸿洋大神的文章
装饰者模式

装饰者模式:若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。
先简单描述下装饰者模式发挥作用的地方,当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。

首先是装备的超类

/** * 装备的接口 *  * @author zhy *  */
public interface IEquip
{  /** * 计算攻击力 *  * @return */  public int caculateAttack();  /** * 装备的描述 *  * @return */  public String description();
}  

然后分别是武器、戒指、护腕、鞋子

/** * 武器 * 攻击力20 * @author zhy *  */
public class ArmEquip implements IEquip
{  @Override  public int caculateAttack()  {  return 20;  }  @Override  public String description()  {  return "屠龙刀";  }  }  
/** * 戒指 * 攻击力 5 * @author zhy * */
public class RingEquip implements IEquip
{  @Override  public int caculateAttack()  {  return 5;  }  @Override  public String description()  {  return "圣战戒指";  }  }
/** * 护腕 * 攻击力 5 * @author zhy * */
public class WristEquip implements IEquip
{  @Override  public int caculateAttack()  {  return 5;  }  @Override  public String description()  {  return "圣战护腕";  }  }  
/** * 鞋子 * 攻击力 5 * @author zhy *  */
public class ShoeEquip implements IEquip
{  @Override  public int caculateAttack()  {  return 5;  }  @Override  public String description()  {  return "圣战靴子";  }  }  

接下来当然是装饰品,宝石了,首先超类

/** * 装饰品的接口 * @author zhy * */
public interface IEquipDecorator extends IEquip
{  }  

下来蓝宝石、黄宝石、红宝石

/** * 蓝宝石装饰品 * 每颗攻击力+5 * @author zhy *  */
public class BlueGemDecorator implements IEquipDecorator
{  /** * 每个装饰品维护一个装备 */  private IEquip equip;  public BlueGemDecorator(IEquip equip)  {  this.equip = equip;  }  @Override  public int caculateAttack()  {  return 5 + equip.caculateAttack();  }  @Override  public String description()  {  return equip.description() + "+ 蓝宝石";  }  }  
/** * 黄宝石装饰品 * 每颗攻击力+10 * @author zhy *  */
public class YellowGemDecorator implements IEquipDecorator
{  /** * 每个装饰品维护一个装备 */  private IEquip equip;  public YellowGemDecorator(IEquip equip)  {  this.equip = equip;  }  @Override  public int caculateAttack()  {  return 10 + equip.caculateAttack();  }  @Override  public String description()  {  return equip.description() + "+ 黄宝石";  }  }  
/** * 红宝石装饰品 每颗攻击力+15 *  * @author zhy *  */
public class RedGemDecorator implements IEquipDecorator
{  /** * 每个装饰品维护一个装备 */  private IEquip equip;  public RedGemDecorator(IEquip equip)  {  this.equip = equip;  }  @Override  public int caculateAttack()  {  return 15 + equip.caculateAttack();  }  @Override  public String description()  {  return equip.description() + "+ 红宝石";  }  }
public class Test
{  public static void main(String[] args)  {  // 一个镶嵌2颗红宝石,1颗蓝宝石的靴子  System.out.println(" 一个镶嵌2颗红宝石,1颗蓝宝石的靴子");  IEquip equip = new RedGemDecorator(new RedGemDecorator(new BlueGemDecorator(new ShoeEquip())));  System.out.println("攻击力  : " + equip.caculateAttack());  System.out.println("描述 :" + equip.description());  System.out.println("-------");  // 一个镶嵌1颗红宝石,1颗蓝宝石的武器  System.out.println(" 一个镶嵌1颗红宝石,1颗蓝宝石,1颗黄宝石的武器");  equip = new RedGemDecorator(new BlueGemDecorator(new YellowGemDecorator(new ArmEquip())));  System.out.println("攻击力  : " + equip.caculateAttack());  System.out.println("描述 :" + equip.description());  System.out.println("-------");  }
}  

Java也有许多装饰模式的身影,java的各种流就类似我们的装饰模式,把InputStream看做我们的IEquip,把FileInputStream看做我们的IEquipDecorator。这种设计就类似我们的装饰者模式。

我眼中的设计模式(3)相关推荐

  1. (原创)我眼中的设计模式系列之外观模式(二)

    外观模式的基本概念 首先,我们要先了解一下外观模式的基本概念.那到底什么是外观模式?其实就是基于很多模块或者很多子系统提供的一个最高层的接口,控制客户端访问我们的应用程序,减少客户端直接对内部应用程序 ...

  2. c++设计模式编程基础

    设计模式编程基础 设计模式前言 模式 我眼中的设计模式 设计模式的分类 设计模式基本原则 开闭原则案例 迪米特法则 设计模式前言 模式 在一定环境中解决某一问题的方案,包括三个基本元素–问题,解决方案 ...

  3. 大白话 设计模式之虚拟工厂

    什么是设计模式 现在聊起来java设计,那就必然要聊聊设计模式,几年前我刚入行的时候,总是听人说起设计模式,在当时的我看来,那是多么高大上的东西啊,以至于有种遥不可及的感觉,如今自己做java也好几个 ...

  4. JAVA设计模式是个什么玩意儿

    1. 前言 有人说过这么一句话"设计模式是可复用面向对象软件的基础",也就是说设计模式可以让代码复用性更高.学习设计模试是每个程序员从菜鸟走向大神的必经之路,巧妙地运用设计模式可以 ...

  5. 当Kotlin完美邂逅设计模式之单例模式(一)

    简述: 从这篇文章开始,我将带领大家一起来探讨一下Kotlin眼中的设计模式.说下为什么想着要开始这么一个系列文章.主要基于下面几点原因: 1.设计模式一直是开发者看懂Android源码的一个很大障碍 ...

  6. 程序员2009精华本(china-pub首发)--百期后的新起点

    程序员2009精华本(china-pub首发) 定价 : ¥49.00会员价 : ¥36.75(75折) 基本信息 作者: <程序员>杂志社    出版社:电子工业出版社 ISBN:978 ...

  7. 程序员2009精华本(china-pub首发)

    程序员2009精华本(china-pub首发) 定价 : ¥49.00 会员价 : ¥36.75(75折) 基本信息 作者: <程序员>杂志社 出版社:电子工业出版社 ISBN:97871 ...

  8. Unity精华☀️ 面试官眼中的「设计模式」

    目录

  9. 如何正确的对待设计模式——我的观点

    自从接触设计模式以来,一般看到的评论是以推崇为多.不过比较欣慰的是,最近在看<编程人生>中,有两个人对设计模式比较不屑. 之所以欣慰,并不是因为凑个热闹看他们互相攻击,互相批评--而是因为 ...

最新文章

  1. 5 hbase-shell + hbase的java api
  2. ITK:扩张灰度图像
  3. MySQL 开启远程访问权限 | 宝塔系统
  4. debugger怎么用_谷歌开发者工具,这些技巧你用过么?
  5. async和await的错误捕获
  6. python2线程池_python 线程池
  7. OpenCore启动项中无Install macOS Big Sur 的解决办法
  8. Windows操作系统双因素身份认证解决方案
  9. 深度学习实战之车牌识别项目
  10. 九连环问题c语言程序,九连环游戏的算法源代码
  11. 实施持续绩效管理流程的 6 大实用技巧
  12. 【单片机】2.9 看门狗定时器(WDT)功能简介
  13. 括号匹配(POJ2955)题解
  14. 学术论文中常见的英文简写
  15. GNSS观测值质量分析必备基础知识
  16. Python 实验六 文件访问
  17. 学好英语网html首页制作,网页 英语
  18. Axure RP9原型图公共部分创建及使用
  19. java 文件名查找_java 查找目录下指定文件名的文件
  20. 哈工大计算机学院2017,2017年哈工大计算机学院接收推免生公告

热门文章

  1. 我读过的最好的epoll讲解
  2. 超码在线编程大赛初赛 第1场(简要题解)
  3. 国外免费VPS主机的使用注意事项,这篇文章为你解答疑惑
  4. 深度学习中多层全连接层的作用
  5. C# 实现SHA256加密
  6. 学校计算机的使用英语作文180字,我的梦想高中英语作文180字
  7. 快讯:北京今天下雪了!
  8. Flutter学习笔记学习资料推荐,手机端开发工具
  9. C/C++微实践 - 细胞计数
  10. 抛投侦察机器人_一种抛投式两轮侦察机器人的制作方法