蛀牙--《设计模式---通往未来的很高的台阶之(二)》

本文深入探讨JavaScript中的多态性,解释如何利用多态在面向对象编程中提高代码灵活性。通过导演拍电影的例子说明多态的好处,讨论在地图应用API更换时如何利用多态避免代码修改。此外,预告了适配器模式在解决方法不一致问题中的作用,并引用《JavaScript设计模式与开发实践》中的见解,强调多态在设计模式中的核心地位。
摘要由CSDN通过智能技术生成

本文承接(一)

上文介绍到多态 本文从JavaScript的多态开始记录

设计模式学习前期准备:

1、js的多态

多态的思想就是吧坐什么和谁去做分离开。以Java为例,大家都知道Java是静态类型语言,要实现多态,归根结底是要消除类型之间的耦合关系。如果类型之间的耦合关系没有消除,那么makeSound方法中指定的叫的指令的对象是某个类型,他就不可能再被替换为另一个类型,在java中,可以通过向上转型来实现多态。

然而。js的变量类型在运行时是可以变化的,这就意味着js对象的多态性是与生俱来的。

2、多态思想在面向对象程序设计中的作用

多态的最根本好处在于,你不必在向对象询问你是什么类型。然后根据得到的答案调对象的的某个行为。
蛇魔意思呢?:::::

举个栗子———这里写图片描述

拍电影,导演喊开始,灯光师做灯光,演员背台词,道具师撒雪花,群演逃跑等。在听到指令时,每个人多知道自己应该坐什么。如果不利用对象的多态,导演就得走到每个人面前告诉他该坐什么。耽误进度

这个例子就和动物的叫声类似

《JavaScript设计模式与开发实践》中一例
假设我们编写一个地图应用,利用谷歌和百度地图提供的API

var googleMap = {
    show:function(){
        console.log("显示地图");
    }
};

var renderMap = function(){
    googleMap.show();
}

renderMap();   //开始渲染谷歌地图

后来因为某些原因要把谷歌地图换成百度地图,为了让renderMap函数保持一定的弹性,我们利用一些条件分支让renderMap函数同时支持谷歌和百度地图:

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函数继续添加条件分支。所以说这种弹性很脆弱。

那么怎么改进才能保持健壮的弹性呢???

这里写图片描述

咦咦咦—-换图片了 惊讶

找你妹都玩过吧,咱们反过来找相同的地方

分析:
不管是谷歌百度还是别的 地图都要渲染吧,假设地图都是以show方法来展现的,这就是相同的部分,映射到代码中

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

renderMap(googleMap);// 显示谷歌地图
renderMap(baiduMap);//显示百度地图

根据以上代码,对象的多态性提示我们,坐什么 和 怎么做 是可以分开的 , 即使以后增加了别的地图,renderMap函数依然不需要改变。比如我们增加一个 蛀牙地图

var zhuyaMap = {
    show:function(){
        console.log('显示蛀牙地图');
    }
}

如果每个地图调用显示的方法不是show 而且还都不一样 怎办。这时候就可以 应用适配器模式来解决问题
适配器模式将在后续的更新中提到

我们已经一再强调了多态在设计模式中的重要性。

感谢《JavaScript设计模式与开发实践》一书给予的知识

人之所以弱小是因为还有缺陷,之所以变得强大,是因为克服了自己的缺陷 —-《蛀牙》

之后将介绍封装——-未完待续

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值