策略模式是一种定义一系列算法的方法,从概念上来看,所有的这些方法完成的都是相同的工作,只是实现不同。
它可以以相同的方式调用所有算法,减少了各种算法类和使用算法的类之间的耦合。
为什么要使用策略模式中的Context 类?
对于前面的三种工厂设计模式,如果用工厂来创建实例,并通过实例调用给实例类中的方法来实现功能。而使用了Context类,通过将 具体的算法类 注入到Context 构造函数中,并在Context 自身的函数中来调用 注入到构造函数中的 具体算法类的特定方法。也就是说,用户代码只是选择了一个具体的算法类并注入到 Context 对象中,然后通过操作 Context 类,来实现需要的功能,避免了用户代码直接操作 具体的算法类。
1. 定义一个 Strategy 接口,该接口为Context 定义了一个calculate() 方法,并交给其实现类来具体实现。
public interface Strategy { public int calculate(int numA, int numB); }
2. 建立一个实现Strategy 接口的AddStrategy 类,实现calculate 方法,返回 numA和numB 的和值
3. 再建立一个实现Strategy 接口的multiStrategy类,实现calculate 方法,返回 numA和numB 的乘积。
4. 建立一个 Context 类 ,该类用来保存 Strategy 实现类的引用,并在自己的方法中调用 实现类的calculate 方法,
5. 建立一个TestStrategy 类,来验证实验结果
输出结果为 :
AddStrategy result : 9
multiStrategy result : 20
从实验验证过程中可以看到传给了 Context 不同的Strategy 实现类,最后输出的结果就不同。但是我们知道,对numA 和numB 做的运算式发生在 Strategy 类中,因此,我们可以得出 由于Context 类得存在对 用户隐藏了运算细节,等于说Context 在 Strategy 实现类的外面又包了一层。
“策略模式还有一个优点 是 简化了 但单元测试, 因为每个算法都有自己的类,可以通过自己的接口单独测试 ” 从AddStrategy 的代码中,我们确实可以看到,这个类包含了一个calculate() 方法,因此,可以在单元测试里,直接
new AddStrategy().calculate(3,4) 并观察结果来判断该类的实现是否正确。
分享到:
相关推荐
本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式 1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML...
Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...
3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
1. 理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 使用策略模式的优点如下: 优点: 1. 策略模式利用组合,委托等技术和思想,有效的避免很多...
(4)用户界面具备更短的响应时间:现代GUI框架中大都使用一个事件分发线程(类似于中断响应函数)来替代主事件循环,当用户界面用有事件发生时,在事件线程中将调用对应的事件处理函数(类似于中断处理函数) ...
{14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}{section.14.3} {14.3.1}SAX应用}{206}{subsection.14.3.1} {14.4}dom4j}{207}{section.14.4} {14.5}XPath}{210}{section.14.5} {14.6}apache....
describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...
Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
避坑笔记2021CICDCI/CD流程以及原理说明设计模式:策略模式单例模式工厂模式装饰器模式观察者模式适配器模式模板方法模式SpringBoot:SpringBoot(1):公共配置SpringBoot(2):generatorSpringBoot(3):docker部署...
能学到什么:①工厂模式、策略模式、观察者模式等都是怎么在Spring中体现的;②IOC、AOP、代理、切面、循环依赖都是如何设计和实现的。 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也...
通过这份笔记的学习,你将会有一个系统的调优头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能调优可以使系统稳定,用户体验更佳,甚至在比较大的系统中,还能帮公司节约资源。 但是在项目的开始...
本文实例讲述了Javascript面向对象程序设计对象成员的定义。分享给大家供大家参考,具体如下: 序: 刚接触javascript的时候,觉得这语言有点儿摸不着门道,感觉这玩意儿太难学了,没什么规范,没什么像样的手册,...
第一部分:设计模式 & UML 简单工厂 工厂方法模式 抽象工厂模式 策略模式 责任链模式 命令模式 模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 ...
Ps:Java设计模式 [设计原则] [单一职责原则] [里氏替换原则] [依赖倒转原则] [接口隔离原则] [迪米特法则] [合成复用原则] 设计模式 创建型模式(5种) 结构型模式(7种) 关系型模式(11种) 适配器模式、装饰模式、代理...
VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...
Java学习笔记 :rocket: Author Samin Date 2019-11-12 Desc 分享一下自己如何收集整理分类知识点,旨在帮助开发者们学会整理自己的知识库 [TOC] leetcode :blue_book: 力扣刷题记录 :paperclip: algorithms 算法刷题...
做开发也有挺长一段时间了,都挺忙的,平时也会看些书,或者做一些笔记,有时间就逛逛Github,刷刷掘金什么的,看看别人的见解,涨涨见识,看到好的文章也会选择收藏起来。逐渐地,我也意识到自己也该写写总结,写写...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
识别并应用最常见的设计模式,例如Singleton,Factory,Observer,Model-View-Controller和Mediator模式 使用基于SOLID原理的模块化体系结构设计应用程序 参考 笔记 课程Java代码的代码存储库:面向对象的编程...