js 多态性的考究

来源:互联网 发布:财务对账软件 编辑:程序博客网 时间:2024/05/09 13:19

多态在面向对象程序设计中的作用:

就js多态性问题就行考究下:
多态是面向对象编程语言中最重要的技术利用对象的多态 ,对象 应 做什么并不是临时决定的,而是已经事先约定和排练完毕的。每个对象应该做什么,已经成为了对象的一个方法,被封装在对象的内部,每个对象负责它们自己的行为。所以这些对象可以根据同一个消息,分别进行各自的工作。行为分布在各个对象中,并让这些对象各自负责自己的行为,这正是面向对象设计的优点。
设我们要编写一个地图应用,现在有两家可选的地图API提供我们自己的应用。目前我们选择的是谷歌地图,
谷歌地图的 API 中提供了show 方法,负责在页面上展示地图。
var googleMap = {    show: function(){        console.log( '谷歌地图' );    }};var renderMap = function(){    googleMap.show();};renderMap(); //输出:
后来由于某些原因,需要把谷歌地图换成百度地图,为了让renderMap函数保持一定的弹性,我可以采用一些条件分支来renderMap
函数同时支持谷歌和百度;
var gooleMap = {    show:function(){        console.log('谷歌地图');    }};var baiduMap = {    show:function(){        console.log('百度地图');    }};var renderMap = function(type){    if(type === 'google'){        gooleMap.show();    }else if(type === 'baidu'){        baiduMap.show();    }};renderMap('google');//renderMap('baidu');
虽然保持来一定程度的弹性,但是,还是比较脆弱的,如果再增加个搜狗地图,我们就还得修改renderMap函数;
所以,我就把程序中相同的部分抽象出来,那就显示某个地图;
var renderMap = function(map){    if(map.show instanceof Function){        map.show();    }};renderMap(gooleMap);//renderMap(baiduMap);

现在我们来找这段代码的多态性。当我们向谷歌地图和百度地图对象分别发出“展示地图”的消息时,
会分别调用它们的show方法,就会产生不同的结果。
对象的多态性提示我们,‘做什么’和‘怎么去做’是可以分开的,即使以后增加其他地图,renderMap函数仍然不需要改变;
var sosoMap = {    show:function(){        console.log('嗖嗖地图');    }};renderMap(sosoMap);




 
原创粉丝点击