admin 管理员组文章数量: 1086866
策略设计模式:英雄死亡之后的处理
策略模式:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
设计原则
- 封装变化
- 多用组合,少用继承
- 针对接口编程,不针对实现编程
举例说明
场景:在LOL中有140个英雄,大部分英雄在死亡之后,屏幕变黑;而另一些英雄在死亡后,可以继续释放技能。
需求:增加英雄死亡之后的表现行为方法。
1.封装变化,把死亡之后的这两种行为封装成两个策略类;同时针对接口编程,把这两个策略类抽象成一个接口。
- 新建死亡接口
-
/*** 死亡接口** @author jsk* @Date 2018/11/10 12:42*/ public interface Death {void action(String name); }
- 新建两个死亡策略类
-
/*** 继续释放技能的策略** @author jsk* @Date 2018/11/10 12:45*/ public class ContinueStrategy implements Death {@Overridepublic void action(String name) {System.out.println(name + "已被击杀,可以继续释放5s技能!");} }
-
/*** 黑屏的策略** @author jsk* @Date 2018/11/10 12:46*/ public class BlackScreenStrategy implements Death {@Overridepublic void action(String name) {System.out.println(name + "已被击杀,黑屏中,无法释放技能!");} }
2.多用组合,少用继承。在英雄类中使用策略接口。
-
/*** 英雄实体类** @author jsk* @Date 2018/11/10 12:40*/ public class Hero {private String name;private Death deathStrategy;public Hero(String name, Death deathStrategy) {this.name = name;this.deathStrategy = deathStrategy;}/*** 死亡之后的行为*/public void afterDeath() {deathStrategy.action(name);} }
3.运行程序,使用盖伦、塞恩两个死亡之后不同表现行为的英雄实体。
-
/*** @author jsk* @Date 2018/11/10 12:52*/ public class Main {public static void main(String[] args) {BlackScreenStrategy blackScreenStrategy = new BlackScreenStrategy();ContinueStrategy continueStrategy = new ContinueStrategy();Hero galen = new Hero("盖伦", blackScreenStrategy);Hero thane = new Hero("塞恩", continueStrategy);galen.afterDeath();thane.afterDeath();} }
4.运行结果
围炉夜谈
- 少用继承的原因
复用不够灵活:如果一个英雄基类下有140个英雄子类,这写英雄的afterDeath有两种表现行为;其中120个子类的afterDeath行为与父类一致,但是剩下的20个子类一致;因为java 只支持单继承,所以剩余20个子类都需重新覆盖父类的afterDeath方法。
本文标签: 策略设计模式英雄死亡之后的处理
版权声明:本文标题:策略设计模式:英雄死亡之后的处理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1693763071a241391.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论