之前写过一篇什么是「设计模式」?,没有类图,没有代码,有些同学说看不太懂,今天给大家带来策略模式(有图,有码,有真相!)。

英雄联盟(LOL)
玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技术来设计这些英雄该怎么办?
小明:简单,先来个父类(Superclass),然后让所有的英雄继承此父类,不同的方法重写父类方法即可。

每个英雄的QWER技能都是不一样的,重写可以没问题,但是召唤师技能每个英雄都是固定的几个难不成也都要子类重写?
小明:对哦,召唤师技能如果都让子类重写那么就会产生多个子类代码重复,怎么办呢?

设计原则:找出应用可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

小明:变化之处那就是召唤师技能,可以把召唤师技能抽取出来写成一个接口,所有召唤师技能都需要实现这个接口。

设计原则:针对接口编程,而不是针对实现编程。

小明:这样可以把所有固定的召唤师技能先写好,等玩家选择召唤师技能只需要设置具体的召唤师技能即可。就算以后有新的召唤师技能只需要实现这个接口就好了,具体实现类可以互相的替换。

设计原则:多用组合,少用继承。

小明:思路理清楚了,那就直接上代码。

召唤师技能接口

public interface 召唤师技能 { public void 技能();}

具体实现

public class 治疗术 implements 召唤师技能 {public void 技能(){//为你的英雄和附近的友军回复生命值。
};}

英雄类

public class 英雄 {public void 召唤师技能(召唤师技能 技能){技能变量.技能();}
}

客户端

public class 客户端 {
public static void main(String[] args) {
//选择并创建需要使用的策略对象
召唤师技能 我的治疗术 = new 治疗术();
//创建环境
英雄 我的盖伦 = new 盖伦();
//使用策略
我的盖伦.召唤师技能(我的治疗术);}
}

这就是所谓的「策略模式」了,定义了算法(召唤师技能接口),分别封装起来(具体的实现类:传送、治疗术),让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

以上代码块用中文编写类名、变量名是为了让大家更好的理解,在实战过程中记得替换成相对应的英文。

画图工具:
Giffy Diagrams
相关阅读:
BRVAH之添加动画(策略模式)
扩展阅读:
[如何实施代码重构?](http://www.jianshu.com/p/dac7979f5a29)
参考书籍:
《Head First 设计模式》

LOL设计模式之「策略模式」 1相关推荐

  1. LOL设计模式之「策略模式」

    之前写过一篇什么是「设计模式」?,没有类图,没有代码,有些同学说看不太懂,今天给大家带来策略模式(有图,有码,有真相!). 英雄联盟(LOL) 玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技 ...

  2. 漫画|王者荣耀之「策略模式」

    召唤师技能接口 public interface 召唤师技能 { public void 技能();} 具体实现 public class 治疗术 implements 召唤师技能 {public v ...

  3. 三国演义java_三国演义之「策略模式」

    哈喽,大家好,好久没更新干货了,今天给大家讲解设计模式中的策略模式,怕说的太枯燥,最后以三国演义的例子讲解策略模式的运用 策略模式的定义 策略模式(Strategy Pattern),定义算法族,分别 ...

  4. 从零开始单排学设计模式「策略模式」黑铁 II

    阅读本文大概需要 1.7 分钟. 本篇是设计模式系列的第三篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了, ...

  5. java三层架构是不是策略模式,把「策略模式」应用到实际项目中

    无论你知不知道这个设计模式,但必定在项目中都似曾相识.倘若仅仅聊理论必然枯燥乏味,只有理论和实战相结合方可达到人剑合一的境界. 首先,我来说个需求,倘若是你遇到该如何做?你可停留几分钟,想出你的解决方 ...

  6. 从零开始单排学设计模式「代理模式」青铜 III

    阅读本文大概需要 3.2 分钟. 本篇是设计模式系列的第六篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...

  7. 王者荣耀之「建造者模式」

    点击上方蓝字关注码个蛋 想来躺的可以一起农药哇~~ 作者博客 http://www.jianshu.com/u/197319888337 文章目录 前言 什么是建造者模式? Builder模式的定义 ...

  8. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  9. 设计模式入门(策略模式)

    [0]README 0.1)本文部分文字描述转自 "head first 设计模式",旨在学习 设计模式入门(策略模式) 的基础知识: 0.2)本文章节4和5的source cod ...

最新文章

  1. 如何改变线的长度?CAD .NET热门技术问答精选合集
  2. [散记]在西安之2月23秦阿房宫
  3. 男生的哪个“不要”是真的不要?
  4. 关于肉鸡的一些使用教程
  5. (TOJ1531)爱的伟大意义
  6. android 销毁按钮,Android实现所有Activity全部销毁
  7. IOS设计模式第二篇之单例设计模式
  8. VC 2010 Express下安装OpenCV2.4.4 遇到的问题
  9. python海龟漂亮图案代码大全_Python游戏海龟图案
  10. 用Obsidian实现自动日记
  11. zebradesigner2教程_zebradesigner pro 2中文版-斑马条码打印机软件下载 附带安装教程 - 安下载...
  12. 软件测试方法(单元测试、集成测试、系统测试、确认测试)
  13. 用友YonSuite前后端一体化数智赋能,有化妆品的地方就有老中医
  14. SpringBoot和Vue验证码
  15. 数学智力题 武士数独题目_最新智力题大全及答案-各种最新IQ题目推荐-第1595页-33IQ...
  16. Linux系统Word转换PDF,文档字体乱码不显示问题解决
  17. 教你如何用cmd命令清除流氓软件
  18. 笔记本蓝牙模块转USB接口方法
  19. python 数据处理之使用get_dummies进行one-hot编码
  20. “项目经理,程序员的中年危机

热门文章

  1. java异地登录 怎么解决_同一帐号异地登录
  2. 第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
  3. 计算机桌面最下边的横条叫做,Windows 7系统中,任务栏是指位于桌面最下方的小长条,如何设置...
  4. 通达信公式解密工具5.05_我是亲民_新浪博客
  5. notepad++ 编写html代码快捷键切换到浏览器查看,notepad++在chrome浏览器中打开查看网页效果...
  6. Python中也可以写Excel中的“Vlookup”函数?太牛逼了吧!
  7. 基于Qt的待办软件开发
  8. 高通处理器手机 解锁Bootloader 教程
  9. 文献管理工具EndNote 20.5版本下载安装使用教程
  10. 天地图叠加海图(图片偏移问题)Vue3 ol proj4