zoukankan      html  css  js  c++  java
  • 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() ); // 咯咯咯

    以上代码的缺点就是每添加一种动物都必须改动makesound函数,修改代码的风险比较大,而多态的思想是将不变的事物和可能改变的事物分离开来。

    var makeSound = function( animal ){
    
    animal.sound();
    
    };

    然后把可变的部分各自封装起来,我们刚才谈到的多态性实际上指的是对象的多态性:

    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 googleMap = {
    
    show: function(){
    
    console.log( '开始渲染谷歌地图' );
    
    }
    
    };
    
    var baiduMap = {
    
    show: function(){
    
    console.log( '开始渲染百度地图' );
    
    }
    
    };
    
    var renderMap = function( type ){
    
    if ( type === 'google' ){
    
    googleMap.show();
    
    }else if ( type === 'baidu' ){
    
    baiduMap.show();
    
    }
    
    };
    
    renderMap( 'google' ); // 输出:开始渲染谷歌地图
    
    renderMap( 'baidu' ); // 输出:开始渲染百度地图

    修改后

    var renderMap = function( map ){
    
    if ( map.show instanceof Function ){
    
    map.show();
    
    }
    
    };
    
    renderMap( googleMap ); // 输出:开始渲染谷歌地图
    
    renderMap( baiduMap ); // 输出:开始渲染百度地图
  • 相关阅读:
    如何修改SVN中的用户名和密码
    Telerik_2012_Q3 RadGrid 汉化
    DXperience-12.1.5 官网下载+注册破解+帮助文档
    Telerik_2012_Q3 (已破解)全套下载链接
    WinForm 控件库
    向项目的文件夹中写入数据流
    coolcarousel 图片轮播缩放问题
    IOS开发UI篇--使用CAShapeLayer实现复杂的View的遮罩效果
    iOS开发
    解析 iOS 动画原理与实现
  • 原文地址:https://www.cnblogs.com/wyongz/p/11316523.html
Copyright © 2011-2022 走看看