创建型:工厂模式-简单工厂

创建,工厂,模式,简单 · 浏览次数 : 282

小编点评

**简单工厂模式**是一种面向对象的设计模式,它将创建对象的逻辑单独封装在一个工厂中。 **优点:** * 简化创建对象的逻辑 * 降低代码复杂性 * 提高代码可读性 **缺点:** * 当产品种类较多时,工厂逻辑可能过于复杂 * 扩展性可能受到影响

正文

定义

  之所以叫简单工厂是因为真的非常简单,只要一个工厂(函数)就可以了,如果把被创建的对象称为产品,把创建产品的对象或者方法称为工厂,那么只需要传入不同的参数,就可以返回不同的产品(实例),这种模式就叫简单工厂模式

简单工厂-餐馆点菜

工厂模式其实就是将创建对象的过程单独封装在一个工厂中

它很像我们去餐馆点菜:比如说点一份辣椒炒肉,我们不用关心肉是切丝还是块状、用红辣椒还是其他辣椒等这些菜品制作过程中的问题,我们只关心摆上桌那道菜

在工厂模式里,我传参这个过程就是点菜,工厂函数里面运转的逻辑就相当于炒菜的厨师和上桌的服务员做的那部分工作——这部分工作我们同样不用关心,我们只要能拿到工厂交付给我们的实例结果就行了

简单工厂代码

如下代码在工厂方法中通过不同的类型参数返回不同的车实例。

在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。这里代码还是常规通过对象来调用工厂方法。如果需要只需在下面代码中,在方法前面加上static 即可。

class BydCar {
  constructor (name, time) {
    this.carName = name
    this.time = time 
  }
  runCarName () {
    console.log(this.carName)
  }
}

class JeepCar {
  constructor (name, time) {
    this.carName = name
    this.time = time 
  }
  runCarName () {
    console.log(this.carName)
  }
}

class BenzCar {
  constructor (name, time) {
    this.carName = name
    this.time = time
  }
  runCarName () {
    console.log(this.carName)
  }
}
class CarFactory {
// 创建车的工厂 createCar (carType, name, time) {
if (carType === 'byd') { return new BydCar(name, time) } if (carType === 'jeep') { return new JeepCar(name, time) } if (carType === 'benz') { return new BenzCar(name, time) } } } // 工厂对象 const carFactory = new CarFactory() // 生成各个具体的实例 const bydCar = carFactory.createCar('byd', 'byd 汽车', '2022-10-20') const jeepCar = carFactory.createCar('jeep', 'jeep 汽车', '2022-10-20') const benzCar = carFactory.createCar('benz', 'benz 汽车', '2022-10-20') // 各个实例干自己的事情 bydCar.runCarName() jeepCar.runCarName() benzCar.runCarName()

优点

  • 工厂方法中可以很方便的插入你需要的逻辑判断,这样可以决定在什么时候创建哪一个产品类的实例,外部可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象
  • 外部无须知道所创建的具体产品类的类,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

缺点

  • 简单工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  • 简单工厂模式负责的产品过多时,代码可能会很长,在一定程序上增加了系统的复杂度和可读性。
  • 展困难,一旦添加新产品就不得不修改工厂逻辑,同样破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

对于产品种类相对较少的情况,使用简单工厂模式非常简洁。外部只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

小结

  1. 简单工厂模式非常简单只要提供一个工厂即可,将创建对象的过程单独封装
  2. 同时它的应用场景也非常容易识别:构造多个不同实例的地方,我们应该想到简单工厂;
  3. 在写了大量构造函数、调用了大量的 new、自觉非常不爽的情况下,我们就应该思考是不是可以掏出工厂模式重构我们的代码了。

简单工厂关注的是不同的产品(对象),它的特点是“简单粗暴”,通过一个含参的工厂方法,我们可以在工厂中实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。

 

与创建型:工厂模式-简单工厂相似的内容:

创建型:工厂模式-简单工厂

定义 之所以叫简单工厂是因为真的非常简单,只要一个工厂(函数)就可以了,如果把被创建的对象称为产品,把创建产品的对象或者方法称为工厂,那么只需要传入不同的参数,就可以返回不同的产品(实例),这种模式就叫简单工厂模式。 简单工厂-餐馆点菜 工厂模式其实就是将创建对象的过程单独封装在一个工厂中。 它很像

创建型:工厂模式-工厂方法、抽象工厂

简单工厂问题 简单工厂中我们通过参数来返回不同的产品对象,如果管理的对象过多,这个工厂函数会比较庞大,且当我们需要增加一个新的产品时,需要修改这个工厂方法,违反开闭原则(对拓展开放,对修改关闭)。 为了解决简单工厂模式的问题,出现了工厂方法模式。 解决简单工厂思路 简单工厂类图关系类似如下: 如上图

设计模式学习(三):工厂模式

设计模式学习(三):工厂模式 作者:Grey 原文地址: 博客园:设计模式学习(三):工厂模式 CSDN:设计模式学习(三):工厂模式 工厂模式 工厂模式是创建型模式,工厂模式分为:简单工厂,工厂方法和抽象工厂三种类型。 简单工厂 这个模式很简单,比如我们需要制造不同类型的鼠标,我们只需要创建一个鼠

【23种设计模式】工厂方法模式(二)

## 前言 在讲述之工厂方法模式前,我们来先了解简单工厂模式,简单工厂模式是最简单的设计模式之一,它虽然不属于GoF的23种设计模式,但是应用也较为频繁,同时它也是学习其他创建型模式的基础。下面我们来先了解下简单工厂模式,然后针对它的缺点来引出工厂方法模式。 ## 简单工厂模式定义 **简单工厂模式

软件设计模式系列之四——简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于对象的创建,它属于工厂模式的一种。简单工厂模式的主要目标是封装对象的创建过程,使客户端代码与具体类的实例化解耦,从而提高代码的可维护性和可扩展性。

Simple Factory 简单工厂模式简介与 C# 示例【创建型3.1】【设计模式来了_3.1】

本文通过简单的实例对简单工厂模式进行了介绍。

Abstract Factory 抽象工厂模式简介与 C# 示例【创建型1】【设计模式来了_1】

通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。

简易的工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。在工厂模式中,我们定义一个接口或抽象类,该接口或抽象类用于创建对象,但让子类决定要实例化的类。工厂方法模式使类的实例化延迟到其子类。 下面是一个完整的C#实现案例: 首先,我们定义一个接口,用于创建对象: p

Factory Method 工厂方法模式简介与 C# 示例【创建型3】【设计模式来了_3】

本文通过实例介绍了工厂方法模式的用法。

简单工厂模式( Simple Factory Pattern )

简单工厂模式(Simple Factory Pattern),在工厂类中对象决定创建出哪一种产品类的实例。这些产品类都实现了相同的接口,或者继承了相同的父类。 结构图 Factory(工厂角色):它是核心,负责实现创建所有实例的内部逻辑。在工厂类中,提供了一个静态方法,可以直接被外界直接调用,以创建