码上见分晓!
中文版本的设计模式详解,案例中的代码尽量使用了中文.
以游戏和生活中较好理解的场景讲解设计模式的实际用法,便于理解吸收,让设计模式的学习不再困难!!!
更多设计模式欢迎来到我的开源项目设计模式中文版

https://gitee.com/nightrunner/chinese-version-of-design-patterns

import java.util.HashMap;
import java.util.Map;/*** "山丘:吃我一锤!!!!","恶魔猎手:我吸!!!!",其实都是一套技能模板,步骤一样,只是各个步骤有所区别* <p>* 释放技能的过程是一个模板,固定的套路,只是每个英雄的前后摇不同,产生效果不一样,甚至有些技能本身不需要前后摇*/
public class 模板方法模式主程序 {public static void main(String[] args) {山丘之王 山丘之王 = new 山丘之王(new 风暴之锤(技能等级.一));山丘之王.释放技能();split();山丘之王.设置技能(new 天神下凡());山丘之王.释放技能();split();恶魔猎手 恶魔猎手 = new 恶魔猎手(new 魔法燃烧(技能等级.一));恶魔猎手.释放技能();split();山丘之王.设置技能(new 风暴之锤(技能等级.三));山丘之王.释放技能();split();山丘之王.设置技能(new 雷霆一击(技能等级.一));山丘之王.释放技能();split();山丘之王.设置技能(new 雷霆一击(技能等级.三));山丘之王.释放技能();}public static void split() {System.out.println("*************************************************");}
}abstract class 英雄 {Integer 蓝量;技能 技能;public void 扣减蓝量(Integer 蓝量) {if (this.蓝量 - 蓝量 < 0) {throw new RuntimeException("没那么多蓝可扣");}this.蓝量 -= 蓝量;}public Integer 获取蓝量() {return 蓝量;}public 英雄() {}public 英雄(技能 技能) {this.技能 = 技能;}public void 设置技能(技能 技能) {this.技能 = 技能;}public void 释放技能() {技能.释放(this);}@Overridepublic String toString() {return "[" + this.getClass().getSimpleName() + "]";}
}class 恶魔猎手 extends 英雄 {public 恶魔猎手(技能 技能) {super(技能);this.蓝量 = 240;}
}class 山丘之王 extends 英雄 {public 山丘之王(技能 技能) {super(技能);this.蓝量 = 400;//应该是225,不过为了程序效果,用400}
}enum 技能等级 {一, 二, 三
}abstract class 技能 {技能() {}protected 技能等级 技能等级;技能(技能等级 技能等级) {this.技能等级 = 技能等级;}public void 设置技能等级(技能等级 技能等级) {this.技能等级 = 技能等级;}abstract Integer 获取消耗蓝量(技能等级 技能等级);abstract void 前摇(英雄 英雄);abstract void 释放本体(英雄 英雄);abstract void 后摇(英雄 英雄);abstract void 扣减蓝量(英雄 英雄);public final void 释放(英雄 英雄) {Integer 消耗蓝量 = 获取消耗蓝量(技能等级);System.out.printf("%s准备释放%s,当前蓝量%s,技能需要蓝量%s%n", 英雄, this, 英雄.获取蓝量(), this.获取消耗蓝量(技能等级));if (英雄.获取蓝量() - 消耗蓝量 < 0) {System.out.printf("%s蓝不够,放不了%s%n", 英雄, this);return;}System.out.println("蓝量充足");前摇(英雄);释放本体(英雄);扣减蓝量(英雄);后摇(英雄);}@Overridepublic String toString() {return "[" + this.getClass().getSimpleName() + "]";}
}class 通用技能实现 extends 技能 {public static final int 默认耗蓝 = 75;通用技能实现() {}@OverrideInteger 获取消耗蓝量(技能等级 技能等级) {return 默认耗蓝;}public 通用技能实现(技能等级 技能等级) {super(技能等级);}@Overridevoid 前摇(英雄 英雄) {System.out.printf("%s准备释放技能%s,做出了施法前摇动作%n", 英雄, this);}@Overridevoid 释放本体(英雄 英雄) {System.out.printf("%s释放了%s[%s级]%n", 英雄, this, 技能等级);}@Overridevoid 后摇(英雄 英雄) {System.out.printf("%s释放技能%s完毕,做出了施法后摇动作%n", 英雄, this);}@Overridevoid 扣减蓝量(英雄 英雄) {Integer 消耗蓝量 = 获取消耗蓝量(技能等级);英雄.扣减蓝量(消耗蓝量);System.out.printf("%s扣减蓝量%s%n", 英雄, 消耗蓝量);}
}class 风暴之锤 extends 通用技能实现 {HashMap<技能等级, Integer> 伤害列表;public 风暴之锤(技能等级 技能等级) {super(技能等级);伤害列表 = new HashMap<>();伤害列表.put(技能等级.一, 100);伤害列表.put(技能等级.二, 200);伤害列表.put(技能等级.三, 310);}@Overridevoid 释放本体(英雄 英雄) {super.释放本体(英雄);System.out.printf("%s向目标单位扔出了[一个巨大的魔法锤子],目标陷入了眩晕,并产生%s点伤害%n", 英雄, 伤害列表.get(技能等级));}}class 魔法燃烧 extends 通用技能实现 {HashMap<技能等级, Integer> 伤害列表;public 魔法燃烧(技能等级 技能等级) {super(技能等级);伤害列表 = new HashMap<>();伤害列表.put(技能等级.一, 50);伤害列表.put(技能等级.二, 100);伤害列表.put(技能等级.三, 150);}@OverrideInteger 获取消耗蓝量(技能等级 技能等级) {return 60;}@Overridevoid 释放本体(英雄 英雄) {super.释放本体(英雄);Integer 消耗蓝量 = 伤害列表.get(技能等级);System.out.printf("%s吸取目标法力值%s,并造成%s伤害%n", 英雄, 消耗蓝量, 消耗蓝量);}}class 雷霆一击 extends 通用技能实现 {Map<技能等级, Integer> 伤害列表;public 雷霆一击(技能等级 技能等级) {super(技能等级);伤害列表 = new HashMap<>();伤害列表.put(技能等级.一, 60);伤害列表.put(技能等级.二, 110);伤害列表.put(技能等级.三, 150);}@OverrideInteger 获取消耗蓝量(技能等级 技能等级) {return 90;}@Overridevoid 释放本体(英雄 英雄) {super.释放本体(英雄);System.out.printf("%s向目标地面砸下了巨大的魔法锤子!!!,附近的敌人血量减少%s,并减速5秒%n", 英雄, 伤害列表.get(技能等级));}}class 天神下凡 extends 通用技能实现 {public 天神下凡() {设置技能等级(技能等级.一);}@OverrideInteger 获取消耗蓝量(技能等级 技能等级) {return 150;}@Overridevoid 释放本体(英雄 英雄) {System.out.printf("%s释放了[天神下凡]!!!,这下他可以NB一分钟秒了,他变大了,还魔免了,血量也增加了500,攻击增加了20!!!", 英雄);}@Overridevoid 前摇(英雄 英雄) {//没有前摇}@Overridevoid 后摇(英雄 英雄) {//没有后摇}
}

设计模式-模板方法模式-java-中文版相关推荐

  1. 设计模式--模板方法模式--Java实现-- java访问控制关键字用法

    1.什么是模板方法 2.具体实现步骤 5.优缺点 6适用场景 java访问控制关键字用法 – protected的解释 (1)私有的:用关键字private修饰,只有本类可见. (2)默认的:不用访问 ...

  2. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  3. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

  4. 行为型设计模式---模板方法模式

    设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...

  5. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  6. 在一个程序设计里,不同的功能窗口有着相似的功能实现方式,可采用设计模式---模板方法模式

        前段时间学习了一些设计模式,最近在做项目的过程中恰巧用到了其中的一个--模板方法模式.这个模式在程序设计过程中可是为小编省去了不少的代码量呢.具体是怎样应用的呢?接下来小编为您分享. 前面博文 ...

  7. 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  8. 『设计模式』设计模式--模板方法模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  9. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  10. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

最新文章

  1. html5网页仿写,纯CSS代码模仿绘制蚂蚁庄园页面
  2. python是动态编程语言吗-python是一种跨平台、开源、免费的高级动态编程语言,对么...
  3. 020_Vue非父子组件之间数据交互
  4. tablestore换mysql_mysql数据迁移到tablestore
  5. grub修复与grub.conf
  6. android 记录路线轨迹_基于百度地图SDK记录运动轨迹
  7. 【java】JDK安全模块JCE核心Cipher使用详解
  8. 【实践】对比学习在快手推荐系统中的的应用探索
  9. 在一个递增有序链表中插入新结点并保持链表递增顺序不变
  10. 联通手机卡欠费了无法转接人工服务?
  11. 实力采坑----记录一下windows下我的MySQL8.0.11安装过程
  12. 来电通java版_Java 程序员常用的 11 款免费 IDE 编辑器
  13. Linux core文件生成及设置 查看core文件由哪个程序生成的
  14. python 移动文件语句_python移动文件
  15. linux定时器时间轮算法详解
  16. VS2010 Express中文版ISO下载地址
  17. RS232、RS485、RS422、RJ45接口有什么区别?
  18. java实现压缩包嵌套压缩包的下载
  19. HTML---网页编程(2)
  20. 如何在Word中用Visio画图

热门文章

  1. 放屁模拟器v1.0手机版
  2. Codeforces 940 E.Cashback (单调队列,dp)
  3. 《软件安装与使用教程》— Windows 7 和 Windows 10操作系统设置关机快捷键
  4. 微搭低代码实现二维码显示及上传功能
  5. 钱包不鼓就捣蛋,万圣节和极客钱包一起来狂欢
  6. 关于Javascript正则表达式替换
  7. 结合SwipeRefreshLayout可以上拉加载更多下拉刷新的RecyclerView
  8. 【无标题】速度环中限制加速度与加加速度的积分处理
  9. 【算法口诀】记不住算法流程,写成歌谣朗朗上口
  10. 汉白玉产地在哪里_汉白玉产地是在哪里的