工廠模式(Factory)


工廠模式也是對象創建模式之一,它通常在類或類的靜態方法中去實現。構造對象的一種方式是使用new操作符,但使用new時正是針對實現編程,會造成“耦合”問題,與具體的類關系緊密。導致代碼更脆弱,缺乏彈性,在復雜邏輯的項目中建議是面向接口編程。

 

先看簡單工廠模式

Person(name, age) {
    var obj = {}
    obj.name = name
    obj.age = age
    return obj
}
var p1 = Person('jack', 25)
var p2 = Person('lily', 22)

構造函數方式寫一個類的區別在於沒有使用this,而是每次都構造一個空對象,然后給其添加屬性。創建對象方式不是使用new,而是使用函數調用方式。這種方式基本上用來替代一個類(具有相同屬性的對象),而復雜一些的工廠則可以造不同類型的對象。

 

下面以一個水果工廠示例

function Banana() {
	this.price = '$1.5'
}
function Apple() {
	this.price = '$1.2'
}
function Orange() {
	this.price = '$2.2'
}
// 靜態工廠類
function Fruit() {}
Fruit.factory = function(type) {
	if (!window[type]) {
		return
	}
	var fruit = new window[type]
	return fruit
}
// 制造不同的水果
var banana = Fruit.factory('Banana')
var apple  = Fruit.factory('Apple')
var orange = Fruit.factory('Orange')

有三個水果類Banana、Apple、Orange,一個水果工廠類Fruit,通過靜態方法factory每次可以造出不同的水果類對象。

 

工廠模式在JavaScript原生對象Object也有所體現,比如

var obj = Object(),
    num = Object(1),
    str = Object('s'),
    boo = Object(false);

Object就是一個工廠,根據參數不同會構造出不同的對象。obj是一個空對象,num是一個Number類型的對象,str是一個String類型的對象,boo是Boolean類型的對象。

 

jQuery 1.7中新增的$.Callbacks也是一個工廠,每次調用它都會返回一個具有add, remove, fire等方法的對象。還可以根據參數如“once”, “memory”等構造出具有不同性質的對象。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM