標籤:style blog color java os io ar cti
原廠模式
設計原廠模式的目的是為了建立對象。它通常在類或者類的靜態方法實現,具有下列目標:
1.在建立相似對象是執行重複操作
2.在編譯時間不知道具體類型(類)的情況下,為工廠客戶提供一種建立對象的介面。
通過Factory 方法(或類)建立的對象在設計上都繼承了相同的父物件這個思想,它們都是實現專門功能的特定子類。有時候公用父類是一個包含了Factory 方法的同一個類、
代碼:
//父建構函式function CarMaker(){};CarMaker.prototype.drive = function(){ return ‘Vroom, I have ‘ + this.doors +‘ doors‘;};//靜態Factory 方法CarMaker.factory = function(type){ var constr = type, newcar; //如果建構函式不存在,則發生錯誤 if(typeof CarMaker[constr] !== ‘function‘){ throw{ name : ‘Error‘, message : constr + "doesn‘t exist" } } //使得原型繼承父類,但僅繼承一次 if(typeof CarMaker[constr].prototype.drive !== ‘function‘){ CarMaker[constr].prototype = new CarMaker(); } //建立一個新的執行個體 newcar = new CarMaker[constr](); //可選擇性的調用一些方法然後返回.... return newcar;};//定義特定的汽車製作商CarMaker.Compact = function(){ this.doors = 4;}CarMaker.Convertible = function(){ this.doors = 2;};CarMaker.SUV = function(){ this.doors = 24;};var corolla = CarMaker.factory(‘Compact‘);var solstice = CarMaker.factory(‘Convertible‘);var cherokee = CarMaker.factory(‘SUV‘);console.log( corolla.drive() ); //結果為‘Vroom, I have 4 doors‘console.log( solstice.drive() ); //結果為‘Vroom, I have 2 doors‘console.log( cherokee.drive() ); //結果為‘Vroom, I have 24 doors‘