工厂模式分为两种,简单工厂模式和抽象工厂模式。
- 简单工厂模式
function createPeople(name, time, gender) {
let p = new Object();
p.name = name;
p.time = time;
p.gender = gender;
p.getName = function () {
return this.name
};
return p
}
let p1 = createPeople('scc','1995','male'); //
可以解决多个类似对象声明的问题;也就是为了解决实例化对象产生重复的问题。
- 抽象工厂模式(其实就是复杂点的工厂模式)
复杂的工厂模式定义是:用父类来创建子类,可以在各自的子类里定义各自需要的方法。
// 定义自行车的构造函数
var BicycleShop = function (name) {
this.name = name;
this.method = function () {
return this.name;
}
};
BicycleShop.prototype = {
sellBicycle: function (model) {
var bicycle = this.createBicycle(model);
// 执行A业务逻辑
bicycle.A();
// 执行B业务逻辑
bicycle.B();
return bicycle;
},
createBicycle: function (model) {
throw new Error("父类是抽象类不能直接调用,需要子类重写该方法");
}
};
// 实现原型继承
function extend(Sub, Sup) {
//Sub表示子类,Sup表示超类(父类)
var F = function () {};
F.prototype = Sup.prototype;
Sub.prototype = new F();
Sub.prototype.constructor = Sub;
if (Sup.prototype.constructor === Object.prototype.constructor) {
// 检测超类原型的构造器是否为原型自身
Sup.prototype.constructor = Sup;
}
}
var BicycleChild = function (name) {
this.name = name;
// 继承构造函数父类中的属性和方法
BicycleShop.call(this, name);
};
// 子类继承父类原型方法
extend(BicycleChild, BicycleShop);
// BicycleChild 子类重写父类的方法
BicycleChild.prototype.createBicycle = function () {
var A = function () {
console.log("执行A业务操作");
};
var B = function () {
console.log("执行B业务操作");
};
return {
A: A,
B: B
}
}
var childClass = new BicycleChild("scc");
console.log(childClass);
两个好处:
第一:弱化对象间的耦合,防止代码的重复。在一个方法中进行类的实例化,可以消除重复性的代码。第二:重复性的代码可以放在父类去编写,子类继承于父类的所有成员属性和方法,子类只专注于实现自己的业务逻辑。