一、簡單工廠模式
簡單工廠模式屬於類的創建型模式,又叫靜態工廠方法模式。通過專門定義一個工廠類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
舉例說明:
現在有個工廠,可以生產自行車和摩托車,通過外界的訂單來生產產品。
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('生產摩托車車');
}
}
與簡單工廠模式相比,制造產品的工廠類不再 只有一個,而是每種具體產品類都對應一個生產它的具體工廠類。而這些具體工廠類的共同特征再被提取出來形成一個抽象產品類,這些具體產品類都繼承自這個抽象產品類。每當有新的需求,增加一種繼承在抽象工廠的具體工廠類,它符合開閉原則。