一段多态的javascript代码—多态

一段多态的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代码—多态)