zoukankan      html  css  js  c++  java
  • 使用javascript完成一个简单工厂设计模式。

    在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量)。

    工厂模式就是一种有助于消除两个类依赖性的模式。

    工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式。

    简单工厂模式:使用一个类来生成实例。

    复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例。

    简单工厂模式:

    常用对象方法创建和调用

    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部分。

    把这部分单独出来交给一个简单额工厂对象:

    <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工厂单体对象就行。

    最后运行的结果为:

  • 相关阅读:
    GL_LINES_ADJACENCY_EXT等
    Using ASP.NET Sessions from WCF
    Device Contexts, CDC, CPaintDC,CClientDC,CWindowDC,CMetaFileDC
    First Win32 App, 第一个Win32 GUI程序
    MFC Windows程序设计:第二版/(美)帕罗赛斯
    Interlocked 使用
    What are the differences between SRAM and DRAM?
    C++虚函数示例
    First MFC
    WinAPI first gui, 2nd edition, from sun xin
  • 原文地址:https://www.cnblogs.com/lcy-house/p/6200505.html
Copyright © 2011-2022 走看看