设计模式 -- 策略模式
2015年12月10日21:54:25
完成一个功能可能会有好几种算法或者方法来实现,通过对算法和方法的抽象,提供统一接口,不通算法,实现方式为实现类,通过注入不同的实现对象来实现算法,实现方式的灵活切换即为策略模式。
策略模式是针对多种选择的代码片段的优化,是的代码减少修改,符合开闭原则。
- 编码实现就是先将各个算法或者实现方式抽象成一个接口,接口里面是所有实现方式的抽象方法。
- 每增加一种实现方式或者算法实现,就增加一个类实现该接口,并实现里面的抽象方法。
- 最后通过传入不同类的对象来实现不同算法或者实现方式的灵活切换。
优点:逻辑直观,易于扩展。
缺点:每增加一个算法或者实现方式都要实现一个类。类文件会显著增加
感觉设计模式其实就讲的是一种技巧或者写好的代码的捷径。单同时也是牺牲了一部分的,比如类的数量变大了,单却更好的,更优雅的实现比较好的代码。
策略在重构代码中的考量,比如类似 if lese , switch case 这类语句,如果判断很多,其实可以通过策略模式来重构这部分的代码,不至于一大坨,又一大坨的代码块。通过多个实现类的方式,灵活在多种算法,实现方式之间切换。
下面是个减加乘的例子:
首先抽象计算的接口:
/***抽象接口,高度抽象各个算法和实现方式的实现*/ public interface Strategy {public abstract String calculate(float a,float b); }
然后分别是实现类:
相加:
public class AddStrategy implements Strategy {@Overridepublic String calculate(float a, float b) {return "相加的结果"+(a+b);} }
相减:
1 public class SubStrategy implements Strategy { 2 3 @Override 4 public String calculate(float a, float b) { 5 return "相减运算:"+(a-b); 6 } 7 }
相乘:
public class MultiplyStrategy implements Strategy {@Overridepublic String calculate(float a, float b) {return "成法运算:"+(a*b);}}
工厂类:
public class ContextRole {//拥有一个策略类的引用 private Strategy strategy; public ContextRole(String type){if (type.equals("+")) {strategy = new AddStrategy();}else if (type.equals("-")) {strategy = new SubStrategy();}else if (type.equals("*")) {strategy = new MultiplyStrategy();}}public String calculate(float a,float b) { return strategy.calculate(a, b);} }
测试类:
public class Test {/** * @Title: main * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param args 设定文件 * @return void 返回类型 * @throws */public static void main(String[] args) {ContextRole contextRole = new ContextRole("+");System.out.println(contextRole.calculate(1, 2));ContextRole contextRole1 = new ContextRole("-");System.out.println(contextRole1.calculate(1, 2));ContextRole contextRole2 = new ContextRole("*");System.out.println(contextRole2.calculate(1, 2));}}
运行结果:
相加的结果3.0 相减运算:-1.0 成法运算:2.0
设计模式 -- 策略模式相关推荐
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- [设计模式] ------ 策略模式
策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...
- java 策略模式 促销_java设计模式——策略模式
一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...
- Springboot 使用设计模式- 策略模式
前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...
- 李建忠设计模式——策略模式Strategy
目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...
- 15. 星际争霸之php设计模式--策略模式
题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...
- Java设计模式-策略模式作业
Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...
- 设计模式-策略模式2.0
设计模式-策略模式2.0 前面文章我们说过了传统的策略模式的实现,本文我们简单说下设计模式中的升级版的策略模式,策略模式2.0. 代码实现 talk is cheap show me the code ...
- 设计模式-策略模式(Strategy)-Java
设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...
最新文章
- sd 卡驱动--基于高通平台
- Tcp方式采集CNC兄弟设备数据
- 《Python编程:从入门到实践 》[Eric Matthes著] 中文pdf非扫描版
- 电脑上怎么做pdf文件_图片怎么输出为PDF文件?两种办法教你,手机电脑都能转...
- Spring 3.x 企业应用开发实战(含CD光盘1张)
- Android 动态生成布局 (多层嵌套)
- NV21转YUV420P的代码,测试通过
- 记 2022年11月5日 信息安全工程师考试
- Mark down学习日记
- android极光推送被杀,关于APP进程被杀死,极光推送收不到消息的解决办法
- SIEBEL功能组件,eScript入门
- 2021-05-12 MongoDB面试题 在MongoDB中如何排序
- 文字识别模型MNIST
- 数学符号归纳 常用数学符号名称中英文对照
- Windows驱动编程基础教程 (转)
- 主题:windows xp 系统CMD命令大全(一)
- pytorch中的value, top = prob.topk(1, dim=1, largest=True, sorted=True)
- html+css响应式旅游主题网站模板,旅游网站,企业文化新闻类网站,简单web假期课程作业
- linux 服务进程管理,进程管理和系统服务-Linux学习笔记
- 【CYH-02】NOIp考砸后虐题赛:转换式:题解
热门文章
- 【干货】强化学习介绍
- 从上市公司数据读懂我国新兴产业发展态势
- 人工智能正在激活互联网类脑系统,2018年,云脑将成为新热点
- 可怕!315 曝光 50 多款App“窃听”:这条黑色产业链,有人靠你的隐私年赚千万...
- 项目三(2)——抽象类
- 重大合同实为旧事 数据港信披被上交所问询
- 《数据分析实战:基于EXCEL和SPSS系列工具的实践》——3.3 耗时耗力的数据整理过程...
- 在controller中无法通过注解@Value获取到配置文件中定义的值解决办法
- 构建富互联网应用程序监控工作流和流程(1)
- 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3