工厂模式是23中设计模式中的一种,它属于创建型设计模式,可细分为三种:分别是简单工厂模式,工厂方法模式,抽象工厂模式。
一、简单工厂模式
简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
举例说明:
现在有个工厂,可以生产自行车和摩托车,通过外界的订单来生产产品。
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('生产摩托车车');
}
}
与简单工厂模式相比,制造产品的工厂类不再 只有一个,而是每种具体产品类都对应一个生产它的具体工厂类。而这些具体工厂类的共同特征再被提取出来形成一个抽象产品类,这些具体产品类都继承自这个抽象产品类。每当有新的需求,增加一种继承在抽象工厂的具体工厂类,它符合开闭原则。