工厂(Factory)模式我们可以做如下理解,假设有一个Audi的公司生产汽车(似乎也不用假设了),它掌握一项核心的技术就是生产汽车,另一方面,它生产的汽车是有不同型号的,并且在 不同的生产线上进行组装。当客户通过销售部门进行预定后,Audi公司将在指定的生产线上为客户生产出它所需要的汽车。
策略(Strategy)模式在结构上与工厂模式类似,唯一的区别是工厂模式实例化一个产品的操作是在服务端来做的 ,换句话说客户端传达给服务端的只是某种标识,服务端根据该标识实例化一个对象。而策略模式的客户端传达给服务端的是一个实例 ,服务端只是将该实例拿过去在服务端的环境里执行该实例的方法。这就好比一个对汽车不甚了解的人去买车,他在那一比划,说要什么什么样的,销售部门根据他的这个“比划”来形成一份订单,这就是工厂模式下的工作方式。而策略模式下那个顾客就是个行家,他自己给出了订单的详细信息,销售部门只是转了一下手就交给生产部门去做了。通过两相对比,我们不难发现,采用工厂模式必须提供足够灵活的销售部门,如果用户有了新的需求,销售部门必须马上意识到这样才可以做出合适的订单。所以倘一款新车出来了,生产部门和销售部门都需要更新,对顾客来说也需要更新对新车的描述所以需要改动的地方有三处。而策略模式中的销售部门工作比较固定,它只负责接受订单并执行特定的几个操作。当一款新车出来时,只需要对服务端的生产部门和客户端的代码进行更新,而不需要更新销售部门的代码。
技术支持:
简单工厂和策略的基础都是因为面向对象的封装与多态。他们实现的思想都是先设定一个抽象的模型并从该模型派生出符合不同客户需求的各种方法,并加以封装。
简单工厂模式可以与策略模式结合。
简单工厂模式需要客户端认识 工厂类 和 抽象类的方法。
而策略模式简单工厂模式的结合可以把客户端的判断封装在Context类的构造函数里,这样可以让客户端只需要认识 Context 类就行了,更降低了耦合度。
例如简单工厂模式:
$a=Factory::func('123');
$a->show();
客户需要知道工厂类的创建方法func与类名Factory.还需要知道返回的类继承的抽象类或者接口定义的方法show()的用法。
而策略模式中
$a=new Context(new aClass(123));
$a->show();
还是需要客户端认识Context类与传入构造函数的参数类,所以可以加以改造,将策略模式与简单工厂模式结合起来,让构造函数接受一个条件变量,在构造函数中根据这个变量来决定产生的具体实例。
$a = new Context(123);
$a->show();
客户只需要认识Context类就可以了。
策略模式的重点在于让算法家族间的算法可以相互替换,引起的变化不会影响到使用算法的客户。
分享到:
相关推荐
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
策略模式(Strategy) 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
详细解释工厂模式和策略模式,是一个完整的项目(源码)
简单工厂模式-策略模式-反射源码下载
NULL 博文链接:https://xiaqi-2009.iteye.com/blog/1041277
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂
PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf
NULL 博文链接:https://gaojiewyh.iteye.com/blog/430429
设计模式中的策略模式,同时兼容简单工厂模式,商场收银模式,易懂可用。
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
设计模式(策略与简单工厂结合_排序)手写代码,自己博客用
后端同学在开发过程中,势必会遇到多条件判断的情况,大部分时候都会直接采用if-else的形式去处理,这样的操作会存在不易扩展的问题,那么...对比枚举策略与简单工厂+策略模式的不同使用,抛砖引玉,引发你更多的思考
策略模式,工厂方法模式,观察者模式 例子学习资料,初学者适用
策略模式和工厂模式很像。 工厂模式:着眼于得到对象,并操作对象。 策略模式:着重得到对象某方法的运行结果。 示例: //实现一个简单的计算器 interface MathOp{ public function calculation($num1,$num2); } /...
简单工厂模式的C语言实现。改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
利用策略模式和简单工厂模式,实现商场收银软件。 营业员根据所购买商品的单价和数量,向客户收费 软件功能包括: 1、正常收费 2、打折收费(1折、5折、9折)
抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...
设计模式:简单工厂、方法工厂、抽象工厂、单例、原型、委派、模板、代理、策略