博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LOL设计模式之「策略模式」
阅读量:6574 次
发布时间:2019-06-24

本文共 1022 字,大约阅读时间需要 3 分钟。

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

英雄联盟(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 盖伦(); //使用策略我的盖伦.召唤师技能(我的治疗术); }}

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

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

画图工具:

相关阅读:
扩展阅读:
](
参考书籍:

转载地址:http://aggjo.baihongyu.com/

你可能感兴趣的文章
SNMP AGENT函数介绍
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
A Visual Git Reference
查看>>
Tomcat 关于表单提交数据量过大导致数据丢失的问题
查看>>
金融数据库
查看>>
翻了100个程序员的朋友圈, 发现个个都是套路王
查看>>
取消从上一界面push过来后,左上角的back按钮
查看>>
为什么 ++[[]][+[]]+[+[]] = 10?
查看>>
ContentProvider
查看>>
Redis 持久化存储
查看>>
Android 自定义GridView网格布局
查看>>
基于 jQuery & CSS3 实现智能提示输入框光标位置
查看>>
我的友情链接
查看>>
ThreadLocal分析
查看>>
mysql优化:连接数
查看>>
PHP 时间操作 / 跳转问题
查看>>