从王者荣耀看设计模式(策略模式)

一:简介

游戏开始前,玩家需要选择英雄,再根据所选择的阵容自由选择召唤师技能,游戏开始,玩家可以控制英雄进行普通攻击和使用召唤师技能攻击

二:策略模式

策略模式将可变的部分从程序中抽象出来分离成算法接口,在该接口下分别封装一系列算法实现

  • 这其中的设计原则有:
  1. 找出应用中需要变化的部分,把他们独立出来做成算法接口。(把英雄的召唤师技能做成了算法接口)
  2. 面向接口编程,而不是面向实现。(我们在使用召唤师技能策略接口时,并不知道它以后还会有什么样的召唤师技能)
  3. 多用组合,少用继承(一个完整的英雄,是用具体的接口对象组合而成的,或者说各种接口小对象组合成了一个英雄对象)
  • 策略模式的优点
  1. 使用组合,而不单单是继承,使得架构更灵活。
  2. 富有弹性,可以较好的应对未来的变化。(开-闭原则)
  3. 更好的代码复用性。(相对于继承)
  • 策略模式的缺点
  1. 增加了对象的数目(每个接口都做成了一个对象,对象数目增多)

三:类图

四:代码实现

接口ISkill

package com.game.Skill;
/** 英雄的召唤师技能接口*/
public interface ISkill {/** 使用召唤师技能的方法*/public abstract void useSkill();
}

类JiPa0实现ISkill接口

package com.game.Skill.impl;
import com.game.Skill.ISkill;/** 召唤师技能(疾跑)*/
public class JiPao implements ISkill {public void useSkill() {System.out.println("疾跑,75秒CD,增加30%移动速度持续10秒");}
}

类KuangBao实现ISkill接口

package com.game.Skill.impl;
import com.game.Skill.ISkill;
/** 召唤师的技能(狂暴)*/
public class KuangBao implements ISkill {@Overridepublic void useSkill() {System.out.println("狂暴:60秒CD,增加攻击速度60%持续5秒");}
}

类Hero(体现面对接口思想,需传入一个技能接口对象)

package com.game.domain;
import com.game.Skill.ISkill;
/** 英雄类(抽象类)*/
public abstract class Hero {//英雄的名称private String heroName;//英雄的召唤师技能的接口(组合关系,需要使用时传入一个具体的技能对象)private ISkill iskill;  //英雄的自我介绍的方法public abstract void display(); //加入一个新的成员(英雄单次攻击的伤害值)private int heroHurt;   //英雄的普通攻击的方法public abstract void normalAttack();    //英雄的召唤师技能的使用方法public void skill() {iskill.useSkill();}   //set/getpublic String getHeroName() {return heroName;}public void setHeroName(String heroName) {this.heroName = heroName;}public void setIskill(ISkill iskill) {this.iskill = iskill;}public int getHeroHurt() {return heroHurt;}public void setHeroHurt(int heroHurt) {this.heroHurt = heroHurt;}
}

类HouYi继承Hero类

package com.game.domain;
/** 英雄后羿类*/
public class HouYi extends Hero {//编写构造方法public HouYi() {super.setHeroName("后羿");}//后羿英雄的自我介绍public void display() {System.out.println("觉醒吧,猎杀时刻!");}//后羿英雄的普通攻击public void normalAttack() {System.out.println("xiuxiu~ 被动:迟缓之箭");}
}

测试类HeroTest

package com.game.test;import com.game.Skill.impl.JiPao;
import com.game.Skill.impl.KuangBao;
import com.game.domain.Hero;
import com.game.domain.HouYi;
/** 英雄与技能的测试类*/
public class HeroTest {public static void main(String[] args) {//1.选择英雄Hero hero = new HouYi();//2.英雄自我介绍System.out.println("英雄:"+hero.getHeroName()+",自我介绍:");hero.display();//3.玩家根据组队情况,设置英雄的召唤师技能hero.setIskill(new JiPao());//面向接口编程的体现hero.setIskill(new KuangBao());//4.游戏开始System.out.println("游戏开始,请做好准备!");//5.使用英雄的普通攻击hero.normalAttack();//6.使用英雄的召唤师技能攻击hero.skill();}
}

五:运行结果

转载于:https://www.cnblogs.com/miaowulj/p/11416731.html

从王者荣耀看设计模式(一.策略模式)相关推荐

  1. 王者荣耀java实现_从王者荣耀看设计模式-策略模式(java版)

    王者荣耀 曾经我也是一名玩农药的大学生,但现在已经弃了,别问我为什么(被坑爹队友坑的哭...).而今天我们来把让农药变荣耀,我们来从王者荣耀中看设计模式的策略模式. 射手 00.分析 我们先来思考,王 ...

  2. 从王者荣耀看设计模式(十七.桥接模式)

    从王者荣耀看设计模式(桥接模式) 一.简介 王者荣耀是一款RGB游戏,玩家操控自己选择的英雄进行竞赛.在游戏正式开始前,玩家在挑选想要操作的英雄的同时,也会挑选适合该英雄的召唤师技能.召唤师技能是通用 ...

  3. 从王者荣耀看设计模式(六.状态模式)

    从王者荣耀看设计模式(状态模式) 一.简介 英雄项羽在敌方英雄的攻击下存在3种不同的状态. 1.在健康生命值下--普通状态,在每次被攻击时,当前生命值=剩余生命值-敌方英雄伤害值 2.在生命值低于某一 ...

  4. 从王者荣耀看设计模式(五.组合模式)

    从王者荣耀看设计模式(组合模式) 一.简介 在王者荣耀这款游戏中,我们可以在商店中购买英雄.英雄由法师.射手.打野等职业组合而成,其中各个职业由中国元素的英雄和外国元素的英雄组成,玩家可根据需要挑选并 ...

  5. 从王者荣耀看设计模式(十.外观模式)

    ##从王者荣耀看设计模式(外观模式) 一.简介 王者荣耀是由多人协同开发而成,每个人负责游戏的一个或多个子功能,一个完整的功能是由很多已开发的子功能组合成的.我们要玩游戏时,只需要打开王者荣耀APP, ...

  6. 从王者荣耀看设计模式(虚拟代理模式)

    从王者荣耀看设计模式(虚拟代理模式) 一.简介 王者荣耀游戏设置了很多种游戏模式,比如:王者模拟战.无限乱斗.梦境大乱斗.火焰山大战等.当从王者荣耀的主界面进入各类模式的界面时,由于网络原因,会存在一 ...

  7. 从王者荣耀看设计模式(二十二.备忘录模式)

    从王者荣耀看设计模式 一.简介 点击王者荣耀商店法术的装备栏,存在有"贤者的庇护"这一装备.在对战中,当玩家处于死亡状态时,会触发此装备的效果,能够让英雄重新复活. ┬┴┬┌─ ● ...

  8. 从王者荣耀看设计模式(远程代理模式)

    从王者荣耀看设计模式(远程代理模式) 一.简介 每位王者荣耀玩家都有一个属于自己的游戏账号.为了提升游戏等级或者增加游戏体验感,会存在多个游戏玩家同时共享一个游戏账号的情况.当一位玩家使用账号正在游戏 ...

  9. 从王者荣耀看设计模式(四.简单工厂模式)

    从王者荣耀看设计模式(简单工厂模式) 一.简介 游戏开始前,玩家可从英雄池自由挑选将要出战的英雄 二.简单工厂模式 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫 ...

最新文章

  1. 效果广告点击率预估实践:在线学习
  2. linux 消息队列实例
  3. Pandas.DataFrame转置
  4. 台湾国立大学郭彦甫Matlab教程笔记(2)
  5. 数据中台到底包括什么内容?一文详解架构设计与组成
  6. C语言中时间的基本用法
  7. 这些密码千万不要用!黑客5分钟即可破解!
  8. Selenium应用代码(登录)
  9. [转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]
  10. 华人AI界痛失“一代宗师”,计算机视觉之父黄煦涛教授去世
  11. GridView控件RowDataBound事件中获取列字段值的几种途径
  12. linux脚本done报错,很简单的脚本程序,总是报错
  13. Git 仓库配置不当 日产北美公司的源代码遭泄露
  14. 2oracle单行函数
  15. try except 异常捕获的方法、断言的使用
  16. 实例013:所有水仙花数pyt 打印出所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方
  17. 背篼酥课堂第九课--前端知识、APP知识
  18. CV 经典主干网络 (Backbone) 系列: 开篇
  19. Pytorch Note40 词嵌入(word embedding)
  20. 解决video更多选项按钮点击无反应以及操控video标签的控制按钮

热门文章

  1. php等待参数跳转,Thinkphp页面跳转设置跳转等待时间的操作
  2. python爬取网页文本_手把手教你如何用Python爬取网站文本信息
  3. mysql 追加水印_php 使用GD库为页面增加水印示例代码
  4. 怎么找网页源文件位置_原神白铁块位置分布图 原神白铁块怎么找
  5. 2018年全国计算机二级vb真题,2017年计算机二级VB考试试题
  6. html输入格式限制,jQuery输入框限制输入内容格式插件
  7. linux3.10.53编译,根据官方文档在Linux下编译安装Apache
  8. java核心面试_前100多个核心Java面试问题
  9. slice python_Python slice()
  10. 开课吧Java课堂之如何使用FilenameFilter