工厂模式与策略模式之区别

设计模式有不少种,其中功能类似的不少,可是为何还要分这么多种名字,查阅资料,我以为下面的解释最为合理:用途不同,名字就有区别,一把斧头用来砍人就叫凶器,用来砍柴就叫伐木斧,用来劈门就叫消防斧,这些模式的名字都是根据具体使用时的场景,联系了现实里某样东西或某种习惯而取得,因此很类似的模式行为有不一样叫法。
今天咱们就来研究一些工厂模式与策略模式的一些区别:
工厂模式是建立型模式,适应对象的变化。
策略模式是行为性模式,适应行为的变化
工厂模式封装对象,实例化对象后调用的时候要知道具体的方法,策略模式封闭的是行为,调用的时候必须先制定实例化具体的类,再调用抽象的方法。策略模式和工厂模式一块儿使用的,用工厂来建立算法类。
策略模式的做用是让一个对象在许多行为中选择一种行为。
工厂模式是对父类进行重写,而策略模式是调用不一样类方法。
这俩个模式原本就是解决相似的问题,能够说是孪生兄弟,且内部实现都差很少,都是经过子类来覆盖父类而已,不过简单工厂是把父类直接摆在客户端,而策略模式是将父类隐藏在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设计模式

相关文章
相关标签/搜索