·

模板方法模式在王者荣耀中的应用

·

一、简述

在王者荣耀中,有查看所有英雄功能,并且玩家在查看英雄时可以对英雄的排序做调整。具体而言,玩家可以按照默认排序、名称排序、熟练度排序、上架时间排序、荣耀战力排序等排序方式使英雄按照不同位置排列。

在本实例中,我们将通过这一简单实例来说明,抽象模板中定义的具体方法——钩子方法。具体而言,我们将英雄事先输入到文本中,并通过英雄的名称按照字母排序方式的名称排列。
具体做法:①读取文件内容;②统计出文件内容中的全部单词;③将单词按照字母顺序排序,允许具体模板对排序挂钩,即具体模板可以对单词排序也可以不对单词排序;④输出全部的单词。

二、模板方法模式(Template Method Pattern)

模板方法模式理解:
高度概括:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其它若干个方法,在编写类的时候,可能需要将类的许多方法集成到一个实例方法中,即用一个实例方法封装若干个方法的调用,以此表示一个算法的骨架,也就是说,调用该实例方法相当于按着一定顺序执行若干个方法。
模板方法是关于怎样将若干个方法集成到一个方法中,以便形成一个解决问题的算法骨架。模板方法模式的关键是在一个抽象类中定义一个算法的骨架,即将若干个方法集成到一个方法中,并称该方法为一个模板方法,或简称为模板,模板方法所调用的其他方法通常为抽象的方法,这些抽象的方法相当于算法骨架中的各个步骤,这些步骤的实现可以有子类去完成。

模板方法模式结构中的两种角色:
抽象模板(Abstract Template):抽象模板是一个抽象类。抽象模板定义了若干个方法以表示一个算法的各个步骤,这些方法中有抽象方法也有非抽象方法,其中的抽象方法称作原语操作(Primitive Operation)。重要的一点是,抽象模板中还定义了一个称作模板方法的方法,该方法不仅包含有抽象模板中表示算法步骤的方法调用,而且也可以包含有定义在抽象模板中的其它对象的方法调用,即模板方法定义了算法的骨架;
具体模板(Concrete Template):具体模板是抽象模板的子类,实现抽象模板中的原语操作。

模板方法模式的UML类图:

模板方法模式的优缺点:
优点:

①可以通过在抽象模板定义模板方法给出成熟的算法步骤,同时又不限制步骤的细节,具体模板实现算法细节不会改变整个算法的骨架;
②在抽象模板模式中,可以通过钩子方法对某些步骤进行挂钩,具体模板通过钩子可以选择算法骨架中的某些步骤;
缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

模板方法模式的适用情景:
①设计者需要给出一个算法的固定步骤,并将某些步骤的具体实现留给子类来实现;
②需要对代码进行重构,将各个子类公共行为提取出来集中到一个共同的父类中以避免代码重复。

三、王者荣耀角度下实现模板方法模式结构图及代码

eclipse结构图

主函数【应用(Application)】
Applicayion.java

package angle_templateMethodPattern;import angle_templateMethodPattern.DefaultCollation;
import angle_templateMethodPattern.NameSorting;
import angle_templateMethodPattern.SortTemplate;import java.io.File;
public class Application{public static void main(String args[]) {File file=new File("HeroName.txt");SortTemplate  template=new NameSorting(file);System.out.println("以五个英雄为例");System.out.println("★★★★★★★★★★★");System.out.println("①名称排序:");template.showAllWords();System.out.println("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");template=new DefaultCollation(file);System.out.println("②默认排序:");template.showAllWords();}
}

抽象模板(Abstract Template)
SortTemplate.java

package angle_templateMethodPattern;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;public abstract class SortTemplate{File file;String content;String [] word;SortTemplate(File file){this.file=file;content="";}public final void  showAllWords(){readContent();getWords();if(isSort())sort(word);printWords(word);}public boolean isSort(){       //钩子方法return true;}public final void readContent(){try {StringBuffer str=new StringBuffer();FileReader  inOne=new FileReader(file);BufferedReader inTwo= new BufferedReader(inOne);String s=null;while((s=inTwo.readLine())!=null)str.append(s+"\n");content=new String(str);inOne.close();inTwo.close();}catch(IOException exp){}}public final void  getWords(){//空格字符、数字和符号(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)组成的正则表达式:String regex="[\\s\\d\\p{Punct}]+"; word=content.split(regex); }public  void sort(String [] word){}             //钩子方法public final void printWords(String [] word){for(int i=0;i<word.length;i++){System.out.printf("%-10s",word[i]);}System.out.println();}
}

具体模板(Concrete Template)
DefaultCollation.java

package angle_templateMethodPattern;import angle_templateMethodPattern.SortTemplate;import java.io.File;
public  class DefaultCollation extends SortTemplate{DefaultCollation(File file){super(file);}public  boolean isSort(){return false; }
}

NameSorting.java

package angle_templateMethodPattern;import java.util.*;
import java.io.*;public  class NameSorting extends SortTemplate{NameSorting(File file){super(file);}public  void sort(String [] word){Arrays.sort(word); }
}

文本内容(txt)

AKe【阿珂】
YunZhongJun【云中君】
DaMo【达摩】
BuZhiHuoWu【不知火舞】
XiaoQiao【小乔】

运行结果截图


更多设计模式在王者荣耀中的应用请点击我的→设计模式在王者荣耀中的应用专栏

欢迎留言,一起学习交流~

感谢阅读

END

在王者荣耀角度下分析面向对象程序设计B中23种设计模式之模板方法模式相关推荐

  1. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之工厂方法模式

    · 工厂方法模式在王者荣耀中的应用 · 一.简述 王者荣耀这款游戏目前一共有100位英雄,游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业. 在本实例中, ...

  2. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之责任链模式

    · 责任链模式在王者荣耀中的应用 · 一.简述 在王者荣耀商城中,玩家可以参与夺宝抽奖.夺宝抽奖分两种,一种是积分抽奖,另一种是钻石抽奖:在平常,两种夺宝抽奖方式均可以通过60钻石/积分抽奖一次,或者 ...

  3. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式

    · 原型模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,克隆模式算是一个人气比较高的娱乐模式了,因为该模式下双方可以各有五个一模一样的英雄,可以带给玩家不同的游戏体验,特别是有一些比较好玩的英雄, ...

  4. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式

    · 策略模式在王者荣耀中的应用 · 应用一:[登录游戏前]选择通过何种方式登录游戏 应用二:[游戏开始前]选择英雄及其召唤师技能 应用三:[游戏开始后]选择使用普攻还是技能 一.简述 登录游戏前,玩家 ...

  5. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之备忘录模式

    · 备忘录模式在王者荣耀中的应用 · 一.简述 在王者荣耀的游戏中,贤者的庇护这件装备设计的初衷是提高容错率,常常出现在游戏后期,玩家通过装备贤者的庇护在危急时刻可以实现复活效果,进而保命. 二.备忘 ...

  6. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之组合模式

    · 组合模式在王者荣耀中的应用 · 一.简述 王者荣耀有非常多的英雄,而且每一个不同的英雄也有其自己对应的皮肤.玩家可以根据需要购买不同的英雄皮肤,体验不同英雄皮肤在对局中的感受. 在本实例中,根据组 ...

  7. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之装饰模式

    · 装饰模式在王者荣耀中的应用 · 一.简述 在王者荣耀这款游戏中,英雄在战场上高伤害.高爆发.高移速等是所有玩家共同追求的,那么这些所谓的伤害.移速.穿透力等英雄属性我们可以通过在局外对英雄附带皮肤 ...

  8. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之代理模式

    · 代理模式在王者荣耀中的应用 · 应用一(虚拟代理模式) 应用二(远程代理模式) 应用三(充值送好礼) 一.简述 应用一: 在王者荣耀这款游戏里,设置有很多种娱乐游戏模式,比如:无限乱斗.梦境大乱斗 ...

  9. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之单件模式

    · 单件模式在王者荣耀中的应用 · 一.简述 今年春节王者荣耀出了一个叫做"王者快跑"的限时玩法,许多玩家都很喜欢这个游戏模式.不同于5V5的王者地图,这个地图是一个跑道中途有很多 ...

  10. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之访问者模式

    · 访问者模式在王者荣耀中的应用 · 一.简述 在王者荣耀的社交系统中有2大核心,一为好友系统二为战队系统,好友系统偏向于个人,战队系统偏向于一个集体.玩家可以自己筹备创建战队.亦可加入其他战队.战队 ...

最新文章

  1. 鲲鹏服务器光盘安装操作系统,鲲鹏服务器上安装
  2. go 关闭通道的必要性
  3. html 文本框数量加减,收藏!js实现input加减
  4. 力扣 13.罗马数字转整数
  5. 春节期间的学习小目标
  6. 软件测试人不得不读的经典书籍推荐
  7. 运维网发布的nagioscacti配置文档
  8. 【译】R包介绍:Online Random Forest
  9. jQuery AJAX 方法
  10. 关于asp.net文件下载基本操作
  11. python在财务中的应用实训报告-数据科学与大数据技术专业实训解决方案
  12. ES--highlight(高亮)查询
  13. b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
  14. 细说10月24号为什么是程序员的节日?
  15. ubuntu 22.04 搜狗输入法 的问题
  16. 16张扑克逻辑思维问题详解
  17. 【JAVA】解决mapper绑定异常:nested exception is org.apache.ibatis.binding.BindingException:
  18. 程序员的十层楼 11层(上帝)
  19. 数据预处理——数据清洗
  20. 怎么做好Java性能优化

热门文章

  1. c语言 mac windows,C语言获取windows系统mac列表
  2. C#,图论与图算法,二分图(Bipartite Graph)最佳二分匹配(Maximum Bipartite Matching)算法与源程序
  3. Linux下搭建stackedit本地环境
  4. 学习和体验Ray on volcano
  5. 计算机USB管控,域内计算机USB权限统一管理
  6. 浅谈 Mock Server
  7. vue的.then()方法
  8. 群英队与“转赚”系统介绍
  9. 5G网络实现自动驾驶车联网——第二篇:5G网络内网穿透
  10. redis通过6379端口无法连接服务器