1.  策略模式:

策略模式,也称为政策模式,定义如下:

定义一组算法,将每个算法都封装起来,使他们可以相互转化

2.  策略模式的原理是面向对象的继承和多态。策略模式的3个角色

a. Strategy 抽象策略角色

定义每个策略或算法都具有的方法和属性。

b.  ConcreteStrategy 具体策略角色

实现抽象策略中的业务,该类带有具体的算法实现

c. Context 封装角色

也叫上下文角色,起承上启下的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在变化

3.  策略模式通用源码:

抽象策略角色类:

public interface Strategy {//策略模式操作方法public void  dosomething();}

具体策略角色类:

public class ConcreteStrategy1 implements Strategy {@Overridepublic void dosomething() {System.out.println("策略执行:策略1");}}
public class ConcreteStrategy2 implements Strategy {@Overridepublic void dosomething() {System.out.println("策略执行:策略2");}}

Context 上下文封装类

public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy=strategy;}//封装后的策略方法 public void dosomething(){strategy.dosomething();}
}

测试类:

public class Test {public static void main(String[] args) {//先执行策略1Context context=new Context(new ConcreteStrategy1());context.dosomething();//再执行策略2context=new Context(new ConcreteStrategy2());context.dosomething();}
}

测试代码对应的类图:

4.  策略模式对应的优点:

● 算法可以自由切换

这是策略模式本身定义的,只要实现抽象策略,它就成为策略家族的一个成员,通过封装角色对其进行封装,保证对外提供“可自由切换”的策略。

● 避免使用多重条件判断

如果没有策略模式,我们想想看会是什么样子?一个策略家族有5个策略算法,一会要使用A策略,一会要使用B策略,怎么设计呢?使用多重的条件语句?多重条件语句不易维护,而且出错的概率大大增强。使用策略模式后,可以由其他模块决定采用何种策略,策略家族对外提供的访问接口就是封装类,简化了操作,同时避免了条件语句判断。

● 扩展性良好

这甚至都不用说是它的优点,因为它太明显了。在现有的系统中增加一个策略太容易了,只要实现接口就可以了,其他都不用修改,类似于一个可反复拆卸的插件,这大大地符合了OCP原则。

转载于:https://www.cnblogs.com/elgin-seth/p/5293762.html

Java设计模式----策略模式(Strategy)相关推荐

  1. Java设计模式-策略模式(Strategy)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...

  2. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  3. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

  4. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  5. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  6. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  7. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  8. 小故事说JAVA设计模式-策略模式【Strategy Pattern】

    # 弄清概念 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式 ...

  9. java设计模式---策略模式

    1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象 ...

最新文章

  1. 大学教师辞职创业,已向高校捐赠超10亿元!多以个人名义……
  2. 概念的理解 —— 奇点(singularity point)、第一性原理(first principle)
  3. 纯Python包发布setup脚本编写示例
  4. vagrant boxes
  5. .Net 2.0中使用扩展方法
  6. JAVA进阶开发之(二维数组)
  7. 求职攻略 | Datawhale助力秋招最强战甲
  8. Activity与Fragment间的通信
  9. Spring 菜鸟教程 异常 集锦
  10. 大疆 RoboMaster 3508/2006/GM6020 电机使用教程
  11. 程序员必备的21款工具与编程灵感
  12. 纯前端导出export,复杂表格表头合并,表头数据部分动态,
  13. 【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点
  14. 一文带您了解软件多租户技术架构
  15. 达梦OCI接口基础开发范例
  16. win10开启热点,设备搜索不到
  17. Leakcanary原理解析以及换肤框架skin的原理分析
  18. sci hub论文下载方法及脚本插件安装
  19. 不是冤家不碰头:贝索斯和马斯克入选福布斯“全球最抠门亿万富豪”榜单
  20. 车牌定位--颜色分割

热门文章

  1. org.springframework.beans.factory.BeanDefinitionStoreExcept
  2. java中io流是类吗_Java中的IO流
  3. MYSQL中where子句与having子句的区别
  4. 开发工具:Git 代码回退功能详解,很实用!
  5. 数据库:SQL 窗口函数知识介绍
  6. SQL Server 涉及数据库安全常用SQL语句
  7. 开源项目中经常出现的七种错误
  8. mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
  9. libcurl库的安装和使用
  10. Android 第十八课 强大的滚动控件 RecyclerView