在简单工厂模式中创建实例的方法通常为静态(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()
优点
- 工厂方法中可以很方便的插入你需要的逻辑判断,这样可以决定在什么时候创建哪一个产品类的实例,外部可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
- 外部无须知道所创建的具体产品类的类,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
缺点
- 简单工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
- 简单工厂模式负责的产品过多时,代码可能会很长,在一定程序上增加了系统的复杂度和可读性。
- 扩展困难,一旦添加新产品就不得不修改工厂逻辑,同样破坏了“开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
对于产品种类相对较少的情况,使用简单工厂模式非常简洁。外部只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。