一段多态的javascript代码—多态

作者: smartphp | 来源:发表于2016-12-08 15:56 被阅读36次

    一段多态的javascript代码—多态

    《javascript设计模式与开发实践》

    定义:同一操作作用于不同的对象,可以产生不同的解释和不同的操作结果

       //动物的发生方法,函数指定谁谁来发声,谁就调用对应的函数
      var makeSound = function( animal ){
            if ( animal instanceof Duck ){ //动态监测传入对象类别
                console.log( '嘎嘎嘎' );
            }else if ( animal instanceof Chicken ){ 动态监测传入对象类别内
                console.log( '咯咯咯' );
            }
        };
       
        var Duck = function(){};  //获得鸭子对象,不知道要干什么
        var Chicken = function(){}; //获得公鸡对象,不知道要干什么
    
        makeSound( new Duck() ); // 这里就是指定鸭子谁去声
        makeSound( new Chicken() ); // 这里指定公鸡去发声
    

    多态背后的思想就是将“谁去做”和“谁去做以及做什么分开” 把不变的部分隔离出来,把可变的部分封装起来。给予我们程序的扩展能力,程序看起来了是看增长的。

    上述程序的具体执行代码仍然是耦合在一起,需要进一步优化。

    首先把不变的部分隔离出来,这里就是所用的动物都会发声

    var makeSound = function( animal ){   //所有的动物都会发声
            animal.sound();   //animal是抽象的,传入谁,就谁的方法
        };
      //可变部分各自封装起来
        var Duck = function(){}; 
    
        Duck.prototype.sound = function(){
            console.log( '嘎嘎嘎' );  //鸭子的多态方法
        };
    
        var Chicken = function(){};
    
        Chicken.prototype.sound = function(){
            console.log( '咯咯咯' ); //公鸡的多态方法
        };
    
        makeSound( new Duck() ); // 嘎嘎嘎
        makeSound( new Chicken() ); // 咯咯咯
      //动物群里有好多种,大黄狗说我也要叫,于是就建立把,其他的动物都一样
        var Dog = function(){};  
    
        Dog.prototype.sound = function(){
            console.log( '汪汪汪' );  //大黄狗的多态逻辑
        };
    
        makeSound( new Dog() ); // 汪汪汪
    

    Javascript 作为动态性语言,变量类型在运行中是可以改变的。一个JS对象。既可以表示鸭子对象类型,又可以表示公鸡类型。
    在makeSound函数中既可以传递duck对象,又可以传递chkicken对象。

    多态最根本的作用就是通过对象的多态性把条件分支语句消除。

    将行为分布在各个对象中,让这些对象各自负责自己的行为。

    相关文章

      网友评论

        本文标题:一段多态的javascript代码—多态

        本文链接:https://www.haomeiwen.com/subject/enjsmttx.html