博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式与策略模式之区别
阅读量:7034 次
发布时间:2019-06-28

本文共 1491 字,大约阅读时间需要 4 分钟。

设计模式有很多种,其中功能相似的很多,但是为什么还要分这么多种名字,查阅资料,我觉得下面的解释最为合理:用途不一样,名字就有区别,一把斧头用来砍人就叫凶器,用来砍柴就叫伐木斧,用来劈门就叫消防斧,这些模式的名字都是根据具体使用时的场景,联系了现实里某样东西或某种习惯而取得,所以很相似的模式行为有不同叫法。

今天我们就来研究一些工厂模式与策略模式的一些区别:
工厂模式是创建型模式,适应对象的变化。
策略模式是行为性模式,适应行为的变化
工厂模式封装对象,实例化对象后调用的时候要知道具体的方法,策略模式封闭的是行为,调用的时候必须先制定实例化具体的类,再调用抽象的方法。策略模式和工厂模式一起使用的,用工厂来创建算法类。
策略模式的作用是让一个对象在许多行为中选择一种行为。
工厂模式是对父类进行重写,而策略模式是调用不同类方法。
这俩个模式本来就是解决类似的问题,可以说是孪生兄弟,且内部实现都差不多,都是通过子类来覆盖父类而已,不过简单工厂是把父类直接摆在客户端,而策略模式是将父类隐藏在Context里面,这样封装更好。
工厂模式意在抽象类型,它为了把相似的不同实体对象 做一个东西,为这些对象实现相同的IO特征
策略模式完全应用工厂模式进行行为选择,但重点指工厂模式里提供的转接/扩展特性。怎么说都觉的不太对劲,但个人理解是,工厂/策略实际是同样的实现,针对这种实现的不同特性做出不同的命名,一个强调统一接口,另一个强调父类的调用子类的特性。
策略模式的问题,简单工厂模式也能实现,但是需要更多的产品类,而策略模式就是为解决这个问题而生的;至于真正用那个模式,就需要经验智慧了。
举个例子:
<1>产品之于加减乘除,水果之于苹果梨橘子香蕉,文具之于笔尺刀,这时产品比较具体、有限和没有多个算法重叠,这时实用简单工厂模式。
<2>产品之于商场促销中的返利(可为300返100、500返200、10000返500等等无数)、折扣(2折、2.5折、6折、9折、9.1折等等无数)、正常购买、消费积分(100元10积分、200元30积分等等无数),这时产品构造又多次重叠,且有在不同时刻应用不同的规则时使用策略模式。
简单工厂模式只是解决了对象的创建问题,工厂需要包括所有的产品对象的创建,如果产品对象形式经常变化,就需要经常改动工厂,以致代码重新编译。所以策略模式就诞生了,策略模式---它定义了算法家族,分别封装起来,而不是像简单产品模式一样定义所有的产品类,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户,使客户拥有相同的访问过程。
简单工厂模式的核心是“简单工厂模式就是用来封装所有的产品对象的”。
策略模式理解核心是“策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中遇到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性”。
在基本的策略模式中,选择所用的具体实现的算法的职责由客户端对象承担,并转给策略模式的Context对象。这是策略模式本身纯粹的定义,所以,“选择所用最终怎样处理”还有很多文章可做。
看了课本之后对于这两个模式还是有很多不理解的地方,但是相信随着对设计模式进一步的学习,能够更好地体会到这其中的奥妙,学习是一个循序渐进的过程。

https://blog.csdn.net/gaibian0823/article/details/27842443

 

转载于:https://www.cnblogs.com/softidea/p/9504749.html

你可能感兴趣的文章
《响应式Web设计:HTML5和CSS3实践指南》——1.5节基于媒介查询的图像缩放
查看>>
Li-Fi无线技术揭秘:Wi-Fi的补充而非替代
查看>>
C Primer Plus 第6版 编程练习 2.12 答案
查看>>
有线电视的用户信息,成为美国黑客的新目标
查看>>
物联网智慧社区 衣食住行全智能
查看>>
高性能的Python扩展:第一部分
查看>>
Qt Linguist介绍
查看>>
Qt Creator快捷键
查看>>
《C语言解惑》—— 2.2 printf输出整数或字符
查看>>
为什么在 Redis 实现 Lua 脚本事务?
查看>>
《草根自媒体达人运营实战》一一2.4 总结
查看>>
Linux 内核被指缺乏安全性
查看>>
《Hadoop与大数据挖掘》——2.7 本章小结
查看>>
《Unity 3D人工智能编程》——2.2 子弹类
查看>>
flatpickr 发布 V3 版本 ,Javascript 日期选择器
查看>>
Win10 Creators Update:自动激活磁盘清理工具
查看>>
《淘宝店铺 大数据营销+SEO+爆款打造 一册通》导读
查看>>
开源大数据周刊-第57期
查看>>
java中文乱码解决之道(六)—–javaWeb中的编码解码
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》导读
查看>>