我眼中的设计模式(3)
继续学习设计模式
参考鸿洋大神的文章
装饰者模式
装饰者模式:若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。
先简单描述下装饰者模式发挥作用的地方,当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。
首先是装备的超类
/** * 装备的接口 * * @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)相关推荐
- (原创)我眼中的设计模式系列之外观模式(二)
外观模式的基本概念 首先,我们要先了解一下外观模式的基本概念.那到底什么是外观模式?其实就是基于很多模块或者很多子系统提供的一个最高层的接口,控制客户端访问我们的应用程序,减少客户端直接对内部应用程序 ...
- c++设计模式编程基础
设计模式编程基础 设计模式前言 模式 我眼中的设计模式 设计模式的分类 设计模式基本原则 开闭原则案例 迪米特法则 设计模式前言 模式 在一定环境中解决某一问题的方案,包括三个基本元素–问题,解决方案 ...
- 大白话 设计模式之虚拟工厂
什么是设计模式 现在聊起来java设计,那就必然要聊聊设计模式,几年前我刚入行的时候,总是听人说起设计模式,在当时的我看来,那是多么高大上的东西啊,以至于有种遥不可及的感觉,如今自己做java也好几个 ...
- JAVA设计模式是个什么玩意儿
1. 前言 有人说过这么一句话"设计模式是可复用面向对象软件的基础",也就是说设计模式可以让代码复用性更高.学习设计模试是每个程序员从菜鸟走向大神的必经之路,巧妙地运用设计模式可以 ...
- 当Kotlin完美邂逅设计模式之单例模式(一)
简述: 从这篇文章开始,我将带领大家一起来探讨一下Kotlin眼中的设计模式.说下为什么想着要开始这么一个系列文章.主要基于下面几点原因: 1.设计模式一直是开发者看懂Android源码的一个很大障碍 ...
- 程序员2009精华本(china-pub首发)--百期后的新起点
程序员2009精华本(china-pub首发) 定价 : ¥49.00会员价 : ¥36.75(75折) 基本信息 作者: <程序员>杂志社 出版社:电子工业出版社 ISBN:978 ...
- 程序员2009精华本(china-pub首发)
程序员2009精华本(china-pub首发) 定价 : ¥49.00 会员价 : ¥36.75(75折) 基本信息 作者: <程序员>杂志社 出版社:电子工业出版社 ISBN:97871 ...
- Unity精华☀️ 面试官眼中的「设计模式」
目录
- 如何正确的对待设计模式——我的观点
自从接触设计模式以来,一般看到的评论是以推崇为多.不过比较欣慰的是,最近在看<编程人生>中,有两个人对设计模式比较不屑. 之所以欣慰,并不是因为凑个热闹看他们互相攻击,互相批评--而是因为 ...
最新文章
- 5 hbase-shell + hbase的java api
- ITK:扩张灰度图像
- MySQL 开启远程访问权限 | 宝塔系统
- debugger怎么用_谷歌开发者工具,这些技巧你用过么?
- async和await的错误捕获
- python2线程池_python 线程池
- OpenCore启动项中无Install macOS Big Sur 的解决办法
- Windows操作系统双因素身份认证解决方案
- 深度学习实战之车牌识别项目
- 九连环问题c语言程序,九连环游戏的算法源代码
- 实施持续绩效管理流程的 6 大实用技巧
- 【单片机】2.9 看门狗定时器(WDT)功能简介
- 括号匹配(POJ2955)题解
- 学术论文中常见的英文简写
- GNSS观测值质量分析必备基础知识
- Python 实验六 文件访问
- 学好英语网html首页制作,网页 英语
- Axure RP9原型图公共部分创建及使用
- java 文件名查找_java 查找目录下指定文件名的文件
- 哈工大计算机学院2017,2017年哈工大计算机学院接收推免生公告