策略模式:定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

设计原则

  • 封装变化
  • 多用组合,少用继承
  • 针对接口编程,不针对实现编程

举例说明

场景:在LOL中有140个英雄,大部分英雄在死亡之后,屏幕变黑;而另一些英雄在死亡后,可以继续释放技能。

需求:增加英雄死亡之后的表现行为方法。

1.封装变化,把死亡之后的这两种行为封装成两个策略类;同时针对接口编程,把这两个策略类抽象成一个接口。

  • 新建死亡接口
  1. /*** 死亡接口** @author jsk* @Date 2018/11/10 12:42*/
    public interface Death {void action(String name);
    }
  • 新建两个死亡策略类
  1. /*** 继续释放技能的策略** @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方法。

策略设计模式:英雄死亡之后的处理相关推荐

  1. java中策略设计模式_Java中的设计模式(五):策略模式

    策略设计模式是行为设计模式之一.当我们为特定任务使用多个算法时,使用策略模式,客户端决定在运行时使用的实际实现. 策略模式的最佳示例之一是Collections.sort()采用Comparator参 ...

  2. Java设计模式之策略设计模式

    1.什么是-策略设计模式 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Ha ...

  3. java策略设计模式_Java中的策略设计模式

    java策略设计模式 策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设 ...

  4. 策略模式示例代码_策略设计模式示例

    策略模式示例代码 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的 ...

  5. java状态模式和策略模式_Java状态和策略设计模式之间的差异

    java状态模式和策略模式 为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设 ...

  6. Java中的策略设计模式

    策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设计模式. UML表示形 ...

  7. java 设计模式 示例_Java中的策略设计模式-示例教程

    java 设计模式 示例 策略模式是行为设计模式之一 . 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时,将使用策略模式. 策略模式也称为策略模式 . 我们定义了多种算法,并让客 ...

  8. 工厂设计模式和策略设计模式_设计模式:策略

    工厂设计模式和策略设计模式 这次我想谈谈策略设计模式 . 通过这种方式,我开始撰写有关行为设计模式的文章. 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好.此方法的最本质点是对象之间的 ...

  9. Java状态和策略设计模式之间的差异

    为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要. 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设计原则,从SOLID设计原则 ...

最新文章

  1. Android Studio 第五十期 - 自定义TabLayout
  2. SilverLight学习笔记--建立Silverlight自定义控件(5)--绑定动画效果
  3. SQL注入(SQL注入(SQLi)攻击)攻击-注入点
  4. java并发中CountDownLatch的使用
  5. Redis java客户端操作
  6. matlab图像处理宝典 秦襄培,秦襄培
  7. loj2683「BalticOI 2013」非回文数 Palindrome-Free Numbers
  8. matlab-lsqcurvefit函数
  9. WIN32_FIND_DATA详解
  10. 简单的三步教你下载PyCharm汉化插件,让你学习Python事功半倍
  11. 树莓派python识别二维码_树莓派识别二维码
  12. VS下载插件慢的解决方法。
  13. (D)TLS1.3大揭秘之TLS1.3总体概览
  14. 中职教计算机专业发展,中等职业教育中计算机专业教育思考
  15. 项目案例:吃货联盟,订餐系统
  16. html+dom+chm,HTML DOM getElementsByClassName() - JavaScript - 菜鸟学堂-脚本之家
  17. 尚硅谷web前端HTML5+CSS3笔记
  18. docker+selenium+node-chrome-debug(node-firefox-debug)完成自动化测试环境的部署
  19. LEFT()与RIGHT()函数
  20. 亚马逊云科技的十年创新之路

热门文章

  1. Laya 多国家语言功能开发
  2. linux终端冒险游戏,【图片】【抛砖引玉】colossal cave adventure(巨洞冒险)游戏经验分享介绍一下吧,早期文字冒险游戏大家玩过吗【linux游戏吧】_百度贴吧...
  3. 基于SincNet的原始波形说话人识别
  4. 基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性
  5. 头文件中自定义PCL点云数据类型并在项目中使用
  6. 【2D目标跟踪】SIMPLE ONLINE AND REALTIME TRACKING阅读笔记(2017)
  7. android popupmenu 动态添加,Android开发使用PopupMenu创建弹出式菜单完整实例
  8. 什么是catalina?
  9. 算法复杂度与性能的解释与计算方法
  10. Centos防火墙配置