`

简单工厂模式与策略模式的区别

    博客分类:
  • JESE
阅读更多

工厂(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类就可以了。

 

策略模式的重点在于让算法家族间的算法可以相互替换,引起的变化不会影响到使用算法的客户。

分享到:
评论

相关推荐

    简单工厂模式VS策略模式小应用

    今天我们将探讨两种重要的设计模式:简单工厂模式和策略模式。这两种模式都是面向对象设计的核心概念,它们各自有着独特的优势和适用场景。 首先,我们来理解简单工厂模式。简单工厂模式是创建型设计模式的一种,它...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    它是简单工厂模式的一种扩展,它将产品实例化的责任委托给子类。在手机加工厂的场景中,每个手机品牌工厂都可以看作是工厂方法模式的一个实现,它们各自负责特定型号手机的组装和测试,例如iPhone工厂负责制造iPhone...

    简单工厂模式和策略模式实现简单排序算法。

    在软件设计模式中,"简单工厂模式"和"策略模式"是两种常用的设计模式,它们在不同的场景下有着各自的优势。本篇文章将探讨如何利用这两种模式实现简单的排序算法,以提高代码的可读性和可扩展性。 首先,简单工厂...

    简单工厂模式、代理模式、策略模式如此相似

    在软件设计模式的世界里,"简单工厂模式"、"代理模式"和"策略模式"都是经典的设计模式,它们各自有着独特的应用场景和优缺点。本文将深入解析这三种模式的原理和区别,帮助读者理解它们在实际开发中的运用。 首先,...

    工厂模式和策略模式

    工厂模式通常分为简单工厂模式、工厂方法模式和抽象工厂模式三种类型。在实际项目中,例如数据库连接的创建,我们可以使用工厂模式来创建不同类型的连接对象,如MySQL连接、Oracle连接等,而无需关心具体的实现细节...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

    Java简单工厂模式和传统模式实现对比

    1. **解耦**: 简单工厂模式将对象的创建与使用分离,客户端只需知道工厂,而不需要知道具体的产品类,降低了客户端代码与产品类之间的耦合度。 2. **易扩展**: 当需要添加新的产品类型时,只需要在工厂类中增加相应...

    简单工厂模式-策略模式-反射源码下载

    简单工厂模式、策略模式以及反射是Java编程中非常重要的概念,它们都是软件设计模式和语言特性的典型应用,对于理解和构建高效、可扩展的代码至关重要。 简单工厂模式是一种创建型设计模式,它提供一个工厂方法,...

    PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf

    PHP 设计模式实例之观察者模式、策略模式、简单工厂模式 PHP 设计模式实例之观察者模式、...观察者模式用于在对象之间定义一对多的依赖关系,策略模式用于定义一系列的算法,简单工厂模式用于提供一个创建对象的接口。

    java简单工厂模式文档简单汇总

    【Java 简单工厂模式】简单工厂模式是一种创建型设计模式,它的主要思想是提供一个工厂类,根据传入的参数动态地返回一个产品对象。这种模式将对象的创建与对象的使用分离,使得代码更加简洁且易于维护。 在Java中...

    简单工厂模式之商场收银软件

    简单工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象的最佳方式。在这个模式中,一个专门的类(称为工厂类)负责创建对象,客户端不再直接创建对象,而是通过调用工厂类的方法来得到所需的产品。这种...

    简单工厂模式论文

    总的来说,简单工厂模式是一种基础且实用的设计模式,尤其适用于对象创建过程较为复杂,且希望将创建过程与使用过程分离的场景。在实际开发中,我们可以结合其他设计模式,如策略模式、工厂方法模式等,以适应更复杂...

    抽象工厂模式+工厂方法模式+策略模式实现手机加工厂

    本案例主要探讨了三种经典的设计模式:抽象工厂模式、工厂方法模式和策略模式,并以手机加工厂为实际应用场景进行阐述。 首先,**抽象工厂模式**是创建型设计模式之一,它提供一个接口,用于创建相关或依赖对象的...

    python 项目里常用的设计模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式 简单工厂 建造者模式 模板模式

    python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式

    简单工厂模式——演示+例子+PPT

    5. **模式扩展**:讨论如何在简单工厂模式基础上进行扩展,如使用策略模式或工厂方法模式以增加灵活性。 6. **模式对比**:与其他创建型模式(如工厂方法、抽象工厂)进行比较,突出各自的特点和适用范围。 通过...

    设计模式(策略与简单工厂结合_排序)手写代码

    本篇文章将聚焦于两种重要的设计模式——策略模式和简单工厂模式,并探讨如何将它们结合应用于排序算法的实现。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其...

    设计模式-简单工厂模式(讲解及其实现代码)

    **简单工厂模式**是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪个类。这个模式使代码可以独立于实际的产品类进行编写。 ### 模式概念 在软件工程中,当一个类不知道它所应该创建的...

    设计模式之简单工厂模式(附demo)

    在实际开发中,简单工厂模式常常与依赖注入、策略模式等其他设计模式结合使用,以提升代码的可维护性和可扩展性。通过阅读`simpleFactory`压缩包中的代码,你可以更深入地理解这个模式的实际应用和优缺点。

    Java策略模式的使用(枚举策略与简单工厂策略)

    后端同学在开发过程中,势必会遇到多条件判断的情况,大部分时候都会直接采用if-else的形式去处理,这样的操作会存在不易扩展的问题,那么...对比枚举策略与简单工厂+策略模式的不同使用,抛砖引玉,引发你更多的思考

Global site tag (gtag.js) - Google Analytics