简单工厂模式又叫静态工厂方法模式,由一个工厂对象决定建立某一种产品对象类的实例。主要用来建立同一类对象。
场景一:
好比体育商店卖体育器材,里面有不少体育用品,及相关介绍,当咱们想买一个篮球及相关介绍时,只须要温售货员,他会帮你找到全部的东西。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个字母和数字');
这两种方式建立简单工厂模式有区别,第一种是经过类实例化对象建立的,第二种是建立一个新对象而后包装加强其属性和功能来实现的。对象