从一系列同类的对象/算法/规则中抽象出共性-基类,客户和基类打交道,问题是如何选择实例化哪个派生类,简单工厂模式中,使用工厂类实例化派生类,选择
过程被封装在工厂类中,客户需要指定一个参数给工厂,工厂按照参数选择实例化出客户需要的派生类。简单工厂模式缺点是:当具体的算法需要改变增加时,就要
修改工厂类,当这种改变的需求很频繁时,工厂方法就比较麻烦了。在简单工厂模式中,客户需要知道抽象基类,也需要知道工厂类;使用工厂类生成对象,使用抽
象基类的接口完成工作。
策略模式(Strategy)定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会
影响到使用算法的客户。策略模式中,除了有一个策略基类以及若干的具体策略(Strategy)类,还有一个上下文(Context)类,Context
类用一个具体的Strategy类来配置,Context类维护对这个Strategy对象的引用。Context类暴露了客户使用的接口,接口通过使用
其引用的策略类的算法接口来实现。为了解决如何选择策略实例化具体算法类的问题,策略模式要和简单工厂模式结合起来。可以通过在构造Context类时指
定参数,来让Context类选择实例化并维护一个策略类,这样客户只和Context类打交道。策略模式在客户端实例化的是Context对象,调用的
是Context类的接口,将策略(即算法)和客户端彻底分离。客户端只需要知道Context类就行了,耦合比简单工厂模式更加降低。(我的理解:其实
又增加了一个间接层Context,Context不但负责选择和实例化-工厂方法,也可以切换策略,比如重新构造新算法实例,从一个全局算法实例组中选
择一个算法等等,实现方法很多)
策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。策略模式还简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
使用工厂方法的策略模式中,仍然需要通过选择分支来决定需要构造什么算法,当修改或增加算法时,需要修改Context类。
分享到:
相关推荐
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
详细解释工厂模式和策略模式,是一个完整的项目(源码)
策略模式(Strategy) 它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂
简单工厂模式-策略模式-反射源码下载
NULL 博文链接:https://gaojiewyh.iteye.com/blog/430429
设计模式中的策略模式,同时兼容简单工厂模式,商场收银模式,易懂可用。
PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf
NULL 博文链接:https://xiaqi-2009.iteye.com/blog/1041277
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
策略模式,工厂方法模式,观察者模式 例子学习资料,初学者适用
抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...
利用工厂模式、装饰者模式、策略模式、责任链模式进行设计与实现。工厂模式完成办公椅不同种类的生成,装饰者模式完成给办公椅添加配件,策略模式完成不同打折算法的自动更替,责任链模式以及反射机制完成不同职位...
生日蛋糕订购系统java编写结合装饰者模式工厂模式和策略模式对蛋糕进行打折
设计模式(策略与简单工厂结合_排序)手写代码,自己博客用
后端同学在开发过程中,势必会遇到多条件判断的情况,大部分时候都会直接采用if-else的形式去处理,这样的操作会存在不易扩展的问题,那么...对比枚举策略与简单工厂+策略模式的不同使用,抛砖引玉,引发你更多的思考
利用策略模式和简单工厂模式,实现商场收银软件。 营业员根据所购买商品的单价和数量,向客户收费 软件功能包括: 1、正常收费 2、打折收费(1折、5折、9折)
设计模式--工厂模式java例子