策略模式应该是Java设计模式中最简单的一种模式,

它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑。

其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的。

策略模式接口定义

比方说现在需要一个计算逻辑,对两个输入的数进行某种运算,

这里可以定义接口为:

策略模式实现

现在如果需要实现加法和算法,只需要定义两个对应的类,实现接口就可以

最后一步,策略模式需要一个策略类,

划重点

到这里你可能会有些疑问,策略模式跟简单工厂模式有什么区别?

都是定义个接口,往一个Context/Factory类里传东西,然后执行抽象好的接口,

从代码层次来说一模一样啊?

这里来回顾下之前说的工厂模式,

设计模式之工厂模式

这里重点关注一个地方,

我们往 Context/Factory 的构造方法里穿的东西不同

· 策略模式

我们传的是构造好的执行对象, AddCaculator()

· 工厂模式

这里传的是不是对象,而是定义好的参数,比如 "add"

他俩的区别在于,策略模式需要调用者创建好执行逻辑的对象,而工厂模式只需要告诉工厂我们要创建什么。

这么说可能不够具体,你可以这么想象,

我们去了一个咖啡厅,想喝一杯咖啡,

策略模式的咖啡厅会说

想喝卡布奇诺还是拿铁,自己调好咖啡和奶的比例拿给他,他帮你在咖啡机上磨好装杯子里给你

工厂模式的咖啡厅会说

跟他说要卡布奇诺还是拿铁就行,你不需要关心咖啡豆的比例和制作过程,他帮你做好装杯子里给你

总结

策略模式跟工厂模式其实思想非常接近,

都是通过接口来去耦合,

而两者的区别也比较容易理解,

策略模式侧重于让调用者控制逻辑的实现,

工厂模式则侧重于让调用者不关心具体的逻辑,只关心需要用什么东西。

java 策略模式和工厂模式区别_Java编程细节——什么是策略模式相关推荐

  1. java参数传入的是一个类名_Java编程细节——泛型的定义(类、接口、对象)、使用、继承...

    1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题: i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放 ...

  2. JAVA中重写和实现的区别_Java中重载和重写的区别

    Java中重载和重写的区别 1.1重载是什么 Overloading   方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型 1.2为什么用重载 重载 ...

  3. Java传统的io和nio区别_Java中IO和NIO的本质和区别

    简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就 ...

  4. java中int和integer的区别_Java异常中throw和throws关键字的区别

    Java中常常弄混的两个关键字,throw和throws,它们有什么区别呢?如何记忆他们,而不至于出错呢? throw和throws 区别 throws:出现在方法的签名中,声明当前方法可能抛出的所有 ...

  5. java中堆与栈的区别_java中堆和栈的区别分析

    堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  6. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...

  7. java字符流和字节流的区别_java字符流与字节流的区别是什么

    java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...

  8. java报表查询 跟 语句查询区别_Java报表FineReport在医院院长查询分析系统中有什么用...

    1.医院院长查询系统的价值 目前,大中型医院的信息处理正从传统手工方式飞速向电脑信息化建设方案转变,一个大中型医院担负着繁重的医疗和科研任务,以及繁杂的事务性工作,院长必须时刻与各科室保持密切的连续, ...

  9. java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别

    对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo() ...

最新文章

  1. Git多人协作工作流程
  2. mysql触发器可以使用正则表达式,是否可以使用正则表达式在MySQL中强制执行数据检查...
  3. isis协议_ISIS与OSPF之间有什么差异?
  4. 计算某日是该年的第几天
  5. javascript的数组和数组元素的遍历,实现全国省份和城市一览表
  6. 图书管理系统需求分析
  7. 软件著作权申请需要哪些材料?
  8. Mac OS X 10.2 (Macintosh)的101个应用技巧(转)
  9. 打印机服务器wps101官方网站,打印机服务器工具
  10. boost电路输出电流公式_​boost电路工作原理、参数计算、占空比
  11. HMM和Viterbi算法
  12. 解决360/google翻译不能用的问题
  13. 城镇污水处理厂工艺概述及提标改造路线
  14. 服务器微信发送图片困难是什么原因导致的,微信接受的图片不清楚的原因是什么?怎么发清楚?...
  15. 前端学习笔记001:HTML5
  16. python避障小车_MicroPython实战:DIY一台会思考的避障车
  17. 解套操作的主要技巧谈
  18. SAP-ABAP-查询特定时间生产订单状态-自建function
  19. iPhone摄像头设备获取
  20. 启闭机 闸门 液压坝生产厂家-邢台市金来利水利机械制造有限公司

热门文章

  1. Springboot毕设项目驾校学员管理系统w42sj(java+VUE+Mybatis+Maven+Mysql)
  2. python 判断空缺字符
  3. 检测到 #include 错误,已为此翻译单元()禁用波形曲线。
  4. python实现2048小游戏(优化版)
  5. 安全周报2022-10-20
  6. 大一学了一年算法的心得.....
  7. 【Python21天学习挑战赛】-爬虫(B站)程序示例
  8. nodejs学习整理
  9. html设置颜色从上到下渐变效果图,css怎么设置渐变色?
  10. 张琦:自行车把网络推进班级『英雄故事』