使用javascript完成一个简单工厂设计模式。

在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

最后运行的结果为:

相关文章
相关标签/搜索