2016-03-21 40 views
-3

我正在和一位有9年JS經驗的朋友聊天。他幫我解決了一個代碼問題,並提到了關閉和JavaScript工廠。我從來沒有聽過這個詞,並想知道「工廠」是JavaScript社區/語言的東西嗎?如果是這樣,有人可以向我解釋嗎?Javascript:什麼是工廠?

我知道封閉是什麼,但據他說,「工廠」是學習語言的下一級。

+1

[工廠模式](https://addyosmani.com/resources/essentialjsdesignpatterns/book/#factorypatternjavascript) – Tushar

+0

谷歌的 「編程工廠」。 –

+1

https://en.wikipedia.org/wiki/Factory_(object-oriented_programming) –

回答

1

Wikipedia

在基於類的編程,工廠方法圖案是造物 圖案使用工廠的方法來處理創建 對象的問題,而不必指定的確切類的對象 將被創建。這是通過調用工廠 方法(通過在接口中指定並通過子類 實現的,或者在基類中實現並且可選地由派生類替代而不是通過調用構造函數來創建對象來完成的)。

Learning JavaScript Design Patterns

工廠模式是關心 概念創建對象的另一種創建模式。與其他類型 不同的是,它沒有明確要求我們使用 構造函數。相反,工廠可以爲創建對象提供一個通用接口,我們可以在其中指定我們想要創建的工廠對象類型 。

想象一下,我們有一個UI工廠,我們被要求創建UI組件的類型 。而不是直接使用 新運算符或通過其他創建構造函數創建此組件,而是要求 工廠對象替代新組件。我們通知工廠需要什麼類型的對象(例如「Button」,「Panel」),並將其示例爲 ,然後將其返回給我們使用。

如果對象創建過程是相對複雜的例如 ,則這是特別有用的。如果它強烈依賴於動態因素或應用程序配置。

此模式的示例可以在UI庫中找到,例如ExtJS ,其中用於創建對象或組件的方法可能更進一步 子類。

實施例:

var Brand = { 
    Daihatsu : function(type) { 
     this.type = type; 
    }, 
    Honda : function(type) { 
     this.type = type; 
    }, 
    Toyota : function(type) { 
     this.type = type; 
    } 
}; 

var Car = { 
    factory : function(brand, type) { 
     return new Brand[brand](type); 
    } 
}; 

var cars = [ 
    Car.factory('Honda', 'Civic'), 
    Car.factory('Toyota', 'AYGO'), 
    Car.factory('Daihatsu', 'Consorte'), 
    Car.factory('Toyota', 'Carina') 
]; 
+0

我認爲你一般不願意使用'new'工廠模式。 – saadq