工廠模式分為兩種蓖宦,簡單工廠模式和抽象工廠模式。
- 簡單工廠模式
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'); //
可以解決多個類似對象聲明的問題;也就是為了解決實例化對象產(chǎn)生重復(fù)的問題油猫。
- 抽象工廠模式(其實就是復(fù)雜點的工廠模式)
復(fù)雜的工廠模式定義是:用父類來創(chuàng)建子類稠茂,可以在各自的子類里定義各自需要的方法。
// 定義自行車的構(gòu)造函數(shù)
var BicycleShop = function (name) {
this.name = name;
this.method = function () {
return this.name;
}
};
BicycleShop.prototype = {
sellBicycle: function (model) {
var bicycle = this.createBicycle(model);
// 執(zhí)行A業(yè)務(wù)邏輯
bicycle.A();
// 執(zhí)行B業(yè)務(wù)邏輯
bicycle.B();
return bicycle;
},
createBicycle: function (model) {
throw new Error("父類是抽象類不能直接調(diào)用情妖,需要子類重寫該方法");
}
};
// 實現(xiàn)原型繼承
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) {
// 檢測超類原型的構(gòu)造器是否為原型自身
Sup.prototype.constructor = Sup;
}
}
var BicycleChild = function (name) {
this.name = name;
// 繼承構(gòu)造函數(shù)父類中的屬性和方法
BicycleShop.call(this, name);
};
// 子類繼承父類原型方法
extend(BicycleChild, BicycleShop);
// BicycleChild 子類重寫父類的方法
BicycleChild.prototype.createBicycle = function () {
var A = function () {
console.log("執(zhí)行A業(yè)務(wù)操作");
};
var B = function () {
console.log("執(zhí)行B業(yè)務(wù)操作");
};
return {
A: A,
B: B
}
}
var childClass = new BicycleChild("scc");
console.log(childClass);
兩個好處:
第一:弱化對象間的耦合,防止代碼的重復(fù)毡证。在一個方法中進行類的實例化电爹,可以消除重復(fù)性的代碼。第二:重復(fù)性的代碼可以放在父類去編寫料睛,子類繼承于父類的所有成員屬性和方法丐箩,子類只專注于實現(xiàn)自己的業(yè)務(wù)邏輯。