js工厂模式--简单工厂,工厂方法模式(复讲)

一、简单工厂模式
简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
举例说明:
现在有个工厂,可以生产自行车和摩托车,通过外界的订单来生产产品。
class FACTORY {
  Product(type) {
    var production;
    switch(type) {
      case 'bike' : 
      production = new Bike();
      break;
      case 'moto' :
      production = new Moto();
      break;
    }
    return production
  }
}
class Bike {
  product() {
    console.log('生产自行车');
  }
}
class Moto {
  product() {
    console.log('生产摩托车车');
  }
}
let order = new ORDER();
console.log('order',order.Product('bike).product());
在上边代码中,工厂类作为最核心存在,他包含了处理业务的逻辑,能够根据外界的条件去创建具体的类,也就是说能够根据订单内容去生产相关产品,无需关注自行车,摩托车是怎么生产的。但是简单虽然简单,当业务
类型多的时候,会不断的向工厂类添加功能,把所有功能都集中到一个类上,足够多的时候这给类难以维护并且臃肿,这违反了开闭原则。
二、工厂方法模式

工厂方法模式是对简单工厂模式的稍微的改进,它定义一个用于创建对象的接口,让子类决定实例化哪一个类。针对上述问题,假如每次添加一种新的产品,都要去更改工厂内部,工厂方法模式就是将这个大厂拆分出各个小厂,每次添加新的产品让小厂去生产,大厂负责指挥就好了。

class FACTORY {

  construct(){  

  }

}

class SONFACTORY extends FACTORY {

  Product(type) {
    var production;
    switch(type) {
      case 'bike' : 
      production = new Bike();
      break;
      case 'moto' :
      production = new Moto();
      break;
    }
    return production
  }

}

class Bike
  product() {
    console.log('生产自行车');
  }
}
class Moto{
  product() {
    console.log('生产摩托车车');
  }
}

与简单工厂模式相比,制造产品的工厂类不再 只有一个,而是每种具体产品类都对应一个生产它的具体工厂类。而这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体产品类都继承自这个抽象产品类。每当有新的需求,增加一种继承在抽象工厂的具体工厂类,它符合开闭原则。

扫描二维码关注公众号,回复: 5541003 查看本文章

猜你喜欢

转载自www.cnblogs.com/linyunchao/p/10534825.html