簡單工廠模式又叫靜態工廠方法模式,由一個工廠對象決定建立某一種產品對象類的實例。主要用來建立同一類對象。
場景一:
好比體育商店賣體育器材,裏面有不少體育用品,及相關介紹,當咱們想買一個籃球及相關介紹時,只須要溫售貨員,他會幫你找到全部的東西。this
//籃球基類 var Baseketball = function () { this.intro = '籃球盛行於美國' } Baseketball.prototype ={ getMember:function () { console.log('每一個隊伍須要5名隊員'); }, getBallSize:function () { console.log('籃球很大'); } } //足球基類 var Football = function () { this.intro = '足球在世界範圍內很流行'; } Football.prototype = { getMember:function () { console.log('每一個隊伍須要11名隊員'); }, getBallSize:function () { console.log('足球很大') } } //網球基類 var Tennis = function () { this.intro = '每一年有不少網球系列賽'; } Tennis.prototype = { getMember:function () { console.log('每一個隊伍須要1名隊員'); }, getBallSize:function () { console.log('網球很小'); } } //運動工廠 var SportFactory = function (name) { switch (name) { case 'NBA':return new Baseketball(); case 'wordCup':return new Football(); case 'FrenchOpen':return new Tennis(); } } //爲世界盃創造一個足球,只須要記住運動工廠SportsFactory,調用而且建立 var football = SportFactory('wordCup'); console.log(football); console.log(football.intro); football.getMember();
場景二:
登陸模塊和註冊模塊的需求中有許多提示框,能夠利用簡單工廠模式,將提示框互相借鑑prototype
var PopFactory = function (name) { switch (name) { case 'alert':return new LoginAlert(); case 'confirm':return new LoginConfirm(); case 'promt':return new LoginPrompt(); } }
可是LoginAlert、LoginConfirm、LoginPrompt有不少是相同的,這時能夠抽取相同的出來,以下:code
function createPop(type,text) { //建立一個對象,並對對象拓展屬性和方法 var o =new Object(); o.content = text; o.show = function () { //顯示方法 } if(type == 'alert'){ //警示框差別部分 } if(type == 'prompt'){ //提示框差別部分 } if(type == 'confirm'){ //確認框差別部分 } //將對象返回 return o; } //建立警示框 var userNameAlert = createPop('alert','用戶名只能是26個字母和數字');
這兩種方式建立簡單工廠模式有區別,第一種是經過類實例化對象建立的,第二種是建立一個新對象而後包裝加強其屬性和功能來實現的。對象