从Java多态到策略模式
来源:互联网 发布:笔记本安装mac系统 编辑:程序博客网 时间:2024/06/05 18:37
先来复习下java多态:java多态指的是父类引用指向子类对象,不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
接下来我们再说下什么叫策略模式:将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
可能说了这么多你还没明白什么事策略模式,接下我们来举个例子
玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技术来设计这些英雄该怎么办?
小肖:简单,先来个父类(Superclass),然后让所有的英雄继承此父类,不同的方法重写父类方法即可。
每个英雄的QWER技能都是不一样的,重写可以没问题,但是召唤师技能DF每个英雄都是固定的几个难不成也都要子类重写?
小肖:对哦,召唤师技能如果都让子类重写那么就会产生多个子类代码重复,怎么办呢?
设计原则:找出应用可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
小肖:变化之处那就是召唤师技能,可以把召唤师技能抽取出来写成一个接口,所有召唤师技能都需要实现这个接口。
设计原则:针对接口编程,而不是针对实现编程。
小肖:这样可以把所有固定的召唤师技能先写好,等玩家选择召唤师技能只需要设置具体的召唤师技能即可。就算以后有新的召唤师技能只需要实现这个接口就好了,具体实现类可以互相的替换。
改进之后父类英雄实现召唤师技能就好了:
设计原则:多用组合,少用继承。
现在应该思路比较清晰了吧,我们开始撸盖伦了
召唤师技能接口
ublic interface 召唤师技能 { public void 技能();}
具体实现
public class 治疗术 implements 召唤师技能 {public void 技能(){ //为你的英雄和附近的友军回复生命值。};}
英雄类
public class 英雄 { public void 设置召唤师技能(召唤师技能 技能变量){ 技能变量.技能(); }}
客户端调用
public class 客户端 { public static void main(String[] args) { //选择并创建需要使用的策略对象 召唤师技能 我的治疗术 = new 治疗术(); //创建环境 英雄 我大盖伦 = new 盖伦(); //使用策略我大盖伦.设置召唤师技能(我的治疗术); }}
首先定义了算法(召唤师技能接口),分别封装起来(具体的实现类:传送、治疗术,清晰术等),让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户,这就是所谓的策略模式。
1 0
- 从Java多态到策略模式
- Java设计模式之从[剪刀石头布AI策略]分析策略(Strategy)模式
- 从java的Comparable和Comparator接口学习策略模式
- 策略模式 从大兵说起
- java策略模式
- java中的策略模式
- Java策略模式(Strategy)
- java笔记 策略模式
- java 策略模式
- java 策略模式
- Java策略模式笔记
- Java策略模式回顾
- 策略模式----Java
- 策略模式-java实现
- JAVA策略模式
- 策略模式--java
- java策略设计模式
- java策略模式
- Qt 文件操作
- 作业项目六
- c#媒体转发服务器HLS服务器实现1
- TLD目标跟踪算法学习(一)
- 大型网站架构系列:20本技术书籍推荐
- 从Java多态到策略模式
- SettingsProvider数据储存位置
- Ubuntu mysql 安装测试指南
- socket通信基础(一)
- FatMouse' Trade
- [AS2.2]Volley小记
- Win服务器SVN提交脚本
- ReactNative之ListView学习总结(一)简单demo
- python获取本地时间