js 多态性的考究

 
 

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

就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);





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值