zoukankan      html  css  js  c++  java
  • 面向对象的几种设计模式

    第一种模式:工厂模式

    function Parent(){

         //原料 var Child=new Object();//创建对象

         //加工 Child.name="aaa";//对象属性 Child.age="30"; child.fn=fn; //对象方法

         //出厂
        return Child; //一定要返回该对象 }; var fn=function(){ return "111"; }; var x=Parent();//创建实例 alert(x.name);

     说明:

        1.在函数中定义对象,并定义对象的各种属性,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法;

        2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象;

        3.在函数的最后返回该对象;

        4.不推荐使用这种方式创建对象,但应该了解

      5.工作原理很像是在工厂工作的一个流程,那就是:原料、加工、出厂。

    第二种模式:构造函数模式

    function Parent(){
        this.name="aaa";//对象属性
        this.age="30";
        this.fn=fn;  //对象方法
    }
    var fn=function(){
        return "111";
    }
    
    var x=new Parent();//创建实例
    alert(x.name);

    说明:

       1.与工厂方式相比,使用构造函数方式创建对象,无需在函数内部重建创建对象,而使用this指代,并而函数无需明确return

       2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外

       3.同样的,不推荐使用这种方式创建对象,但仍需要了解

    第三种模式:原型模式

    function Parent(){
        Parent.prototype.name="aaa";//对象属性
        Parent.prototype.age="30";
        Parent.prototype.fn=fn;  //对象方法
    }
    var fn=function(){
        return "111";
    }
    
    var x=new Parent();//创建实例
    alert(x.name);

    说明:

        1.函数中不对属性进行定义

        2.利用prototype属性对属性进行定义

        3.同样的,不推荐使用这样方式创建对象

    第四种模式:构造函数+原型混合模式(推荐)

       function Parent(){  //构造函数加属性
          this.name="aaa";  
          this.age=3; 
        };
        Parent.prototype.fn=function(){ //原型上加方法
           return this.name;  
        };
          
        var  x =new  Parent();
        alert(x.fn()); 

    说明:

       1.该模式是指混合搭配使用构造函数方式和原型方式;

       2.将所有属性不是方法的属性定义在函数中(构造函数加属性);将所有属性值为方法的属性利用prototype在函数之外定义(原型上挂方法);

       3.推荐使用这样方式创建对象;

    第五种模式:构造函数+原型的动态原型模式(推荐)

    function Parent(){  
          this.name="aaa";  
          this.age=30; 
             if(typeof Parent._fn=="undefined"){    
                 Parent.prototype.fn=function(){ 
                     return this.name;  
                 }  
                 Parent._fn=true;  
             }  
             
        };   
         
        var  x =new  Parent(); 
        alert(x.fn());

    说明:

        1.动态原型方式可以理解为混合构造函数,原型方式的一个特例

        2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为

            if(typeof Parent._fn=="undefined"){                  
               Parent._fn=true;
            } 
         从而保证创建该对象的实例时,属性的方法不会被重复创建

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/yang0901/p/6760210.html
Copyright © 2011-2022 走看看