Java设计模式----策略模式(Strategy)
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)相关推荐
- Java设计模式-策略模式(Strategy)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.策略模式 二.策略模式示例代码 1.支付策略 2.具体支付策略实现 3.策略执行对象 4.测试 总结 前言 本篇介 ...
- 设计模式-策略模式(Strategy)-Java
设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...
- Java设计模式-策略模式作业
Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- 解读设计模式----策略模式(Strategy Pattern)
一.模式概述 策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法. 在我应 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- 李建忠设计模式——策略模式Strategy
目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...
- 小故事说JAVA设计模式-策略模式【Strategy Pattern】
# 弄清概念 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式 ...
- java设计模式---策略模式
1,什么是策略模式? 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象 ...
最新文章
- 大学教师辞职创业,已向高校捐赠超10亿元!多以个人名义……
- 概念的理解 —— 奇点(singularity point)、第一性原理(first principle)
- 纯Python包发布setup脚本编写示例
- vagrant boxes
- .Net 2.0中使用扩展方法
- JAVA进阶开发之(二维数组)
- 求职攻略 | Datawhale助力秋招最强战甲
- Activity与Fragment间的通信
- Spring 菜鸟教程 异常 集锦
- 大疆 RoboMaster 3508/2006/GM6020 电机使用教程
- 程序员必备的21款工具与编程灵感
- 纯前端导出export,复杂表格表头合并,表头数据部分动态,
- 【摸鱼神器】UCode Cms管理系统 内置超好用的代码生成器 解决多表连接痛点
- 一文带您了解软件多租户技术架构
- 达梦OCI接口基础开发范例
- win10开启热点,设备搜索不到
- Leakcanary原理解析以及换肤框架skin的原理分析
- sci hub论文下载方法及脚本插件安装
- 不是冤家不碰头:贝索斯和马斯克入选福布斯“全球最抠门亿万富豪”榜单
- 车牌定位--颜色分割
热门文章
- org.springframework.beans.factory.BeanDefinitionStoreExcept
- java中io流是类吗_Java中的IO流
- MYSQL中where子句与having子句的区别
- 开发工具:Git 代码回退功能详解,很实用!
- 数据库:SQL 窗口函数知识介绍
- SQL Server 涉及数据库安全常用SQL语句
- 开源项目中经常出现的七种错误
- mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
- libcurl库的安装和使用
- Android 第十八课 强大的滚动控件 RecyclerView