在JS中建立對象會習慣的使用new關鍵字和類構造函數(也是能夠用對象字面量)。javascript
工廠模式就是一種有助於消除兩個類依賴性的模式。java
工廠模式分爲簡單工廠模式和複雜工廠模式,這篇主要講簡單工廠模式。函數
簡單工廠模式:使用一個類來生成實例。spa
複雜工廠模式:使用子類來決定一個成員變量應該是哪一個具體的類的實例。prototype
簡單工廠模式:rest
經常使用對象方法建立和調用code
var BallShop = function(){}; BallShop.prototype = { sellBall : function(model){ var ball; switch(model){ case"tennis": ball=new TennisBall();break; case"bask": ball=new BasketBall();break; case"volly": ball=new VollyBall();break; default: ball=new FootBall();break; } return ball; } } var balltype = new BallShop(); balltype .sellBall("tennis");
以上方式可以知足大多數情形下使用,但擴展性就不友好了,若是須要添加一些新的球類,必須修改球類的switch部分。對象
把這部分單獨出來交給一個簡單額工廠對象:blog
<script type="text/javascript"> var BasketBall=function(){ console.log("baseketball is hotting at unitedstates"); } var TennisBall=function(){ console.log("you should buy a TennisBall") } var VollyBall=function(){ console.log("VollyBall is very interesting"); } var FootBall=function(){ console.log("FootBall...") }
var BallFactory={ createBall:function(model){ var ball; switch(model){ case"tennis": ball=new TennisBall();break; case"bask": ball=new BasketBall();break; case"volly": ball=new VollyBall();break; default: ball=new FootBall();break; } return ball; } } var BallShop = function(){}; BallShop.prototype = { sellBall:function(model){ var ball = BallFactory.createBall(model); return ball; } } //調用 var ball1=new BallShop(); ball1.sellBall("tennis"); var ball2=new BallShop() ball2.sellBall("balls"); </script>
BallFactory是一個脫離於BallShop的單體。可以下降耦合度。當須要新添加類型的時候,只要修改BallFactory工廠單體對象就行。ip
最後運行的結果爲: