javascript原廠模式

來源:互聯網
上載者:User

標籤: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‘

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.