JavaScript面向对象编程之多态

作者: tww844475003 分类: 前端开发 发布时间: 2021-06-02 21:39

多态

同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果,换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。

示例

    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'); // 开始渲染百度地图

可以看到,虽然 renderMap 函数目前保持了一定的弹性,但这种弹性是很脆弱的,一旦需要替换成搜搜地图,那无疑必须得改动 renderMap 函数,继续往里面堆砌条件分支语句。

多态的思想实际是把 “做什么” 和 “谁去做” 分离出来,要实现这一点,归根结底先要消除类型之前的耦合关系。

我们还是先把程序中相同的部分抽象出来,那就是显示某个地图:

   var googleMap = {
      show: function() {
        console.log('开始渲染谷歌地图');
      }
    }

    var baiduMap = {
      show: function() {
        console.log('开始渲染百度地图');
      }
    }

    var renderMap = function(map) {
      if (map.show instanceof Function) {
        map.show();
      }
    }

    renderMap(googleMap); // 开始渲染谷歌地图
    renderMap(baiduMap); // 开始渲染百度地图

    var sosoMap = {
      show: function() {
        console.log('开始渲染搜搜地图');
      }
    }

    renderMap(sosoMap);

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注