首页 > 其他分享 >创建型:工厂模式-简单工厂

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

时间:2023-03-02 22:22:08浏览次数:28  
标签:name 创建 简单 模式 工厂 实例 time

定义

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

简单工厂-餐馆点菜

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

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

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

简单工厂代码

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

在简单工厂模式中创建实例的方法通常为静态(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、自觉非常不爽的情况下,我们就应该思考是不是可以掏出工厂模式重构我们的代码了。

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

 

标签:name,创建,简单,模式,工厂,实例,time
From: https://www.cnblogs.com/longbensong/p/17173768.html

相关文章

  • 456. 132 模式
    给你一个整数数组nums,数组中共有n个整数。132模式的子序列由三个整数nums[i]、nums[j]和nums[k]组成,并同时满足:i<j<k和nums[i]<nums[k]<nums[j]。......
  • DDL语言——库和表的创建、修改、删除
    DDL语言DDL:DataDefinitionLanguageDDL允许用户定义数据,也就是创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行。下面的中括号【】内的内容是可选的。......
  • 1. Pandas的创建、读取和写入
    该博客是Pandas课程习题,前往此处可学习课程习题1.创建一个和下图一样的DataFramefruits提示提示:`pd.DataFrame`语句来创建一个DataFrameCodefruits=pd.Dat......
  • 软件体系架构方面英文文章翻译----Android中MVC、MVP和MVVM架构模式的区别
    DifferenceBetweenMVC,MVPandMVVMArchitecturePatterninAndroid22Dec,2022Developinganandroidapplicationbyapplyingasoftwarearchitecturepattern......
  • conda创建Python虚拟环境
    1、首先在所在系统中安装Miniconda3。可以打开命令行输入conda-V检验是否安装以及当前conda的版本。kaka@KakadeMacBook-ProDownloads%conda-Vconda23.1.02、co......
  • Go创建Grpc链接池
    Go创建Grpc链接池转载请注明来源:https://janrs.com/2023/03/创建grpc链接池/常规用法gRPC四种基本使用请求响应模式客户端数据流模式服务端数据流模式双向流模......
  • 设计模式3——结构型模式
    结构型模式描述如何将类或对象按某种布局组成更大的结构,它分为类结构型和对象结构型模式,前者采用继承机制来组织接口和类,后者采用组合或聚合来组合对象。由于组合关系或聚......
  • 16进制颜色转RGB模式带透明度
    functiontoColorRgba(color,opacity){//16进制颜色值的正则varreg=/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;//把颜色变成小写varcolor=col......
  • 创建型:构造器模式
    简介构造器模式,也被称为建造者、生成器模式,是设计模式中比较容易理解的模式之一。定义:将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。定义不......
  • 21-中介者模式
    21-中介者模式概念中介者模式,又叫调停者模式(mediator),用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变......