工廠模式定義:一個用於建立對象的接口,這個接口由子類決定實例化哪個類。該模式使一個類的實例化延遲到了子類。而子類能夠重寫接口方法以便建立的時候指定本身的對象類型。app
看不懂?不要緊,先看看下面的例子。dom
var produceManager = {}; produceManager.createProduceA = function(){ console.log("ProduceA"); } produceManager.createProduceB = function(){ console.log("ProduceB"); } produceManager.factory = function(type){ return new produceManager[type]; } var produce = produceManager.factory("createProduceA");
若是很差理解,咱們舉個實際一點的例子。假設咱們要在一個頁面上插入一些元素,但這些元素不肯定,多是圖片,多是連接,多是文本。咱們須要定義工廠類與子類(產品類)。函數
var page = page || {}; page.dom = page.dom || {}; //子函數:處理文本 page.dom.Text = function(){ this.insert = function(where){ var txt = document.createTextNode(this.url); where.appendChild(txt); }; }; //子函數:處理連接 page.dom.Link = function(){ this.insert = function(where){ var link = document.createElement("a"); link.href = this.url; link.appendChild(document.createTextNode(this.url)); where.appendChild(link); }; }; //子函數:處理圖片 page.dom.Image = function(){ this.insert = function(where){ var im = document.createElement("img"); im.src = this.url; where.appendChild(im); }; }; //工廠 page.dom.factory = function(type){ return new page.dom[type]; }; //test: var o = page.dom.factory("Link"); o.url = "http://abc.com"; o.insert(document.body);
再讀讀這句話:工廠模式定義一個用於建立對象的接口,這個接口由子類決定實例化哪個類。該模式使一個類的實例化延遲到了子類。而子類能夠重寫接口方法以便建立的時候指定本身的對象類型。this
這下是否是清楚多了,還不懂,不要緊,多敲幾遍,多看幾遍,就懂了。url