大话设计模式(三) - 适配器模式

287 阅读2分钟

大话设计模式(三) - 适配器模式

定义与应用

适配器在现实场景中其实有很多, 电源的适配器, USB串口桥接到Mac Pro 上到TYPE-c 接口上,在现实生活中几乎无处不在,同样的,在计算机程序中,为了适配不同架构的机器,兼容不同的浏览器厂商,通过增设适配器的写法,达到兼容的目的。

经典名言

没有什么程序是加一层抽象解决不了的,那么适配器就可以是这个抽象。

优点

适配器是由于架构,机器设备的不统一产生的产物,有以下优点。

  1. 让两个毫无关联的类or 实例运行。

  2. 提高类的复用,(因为都在同一个类下,提高类的复用 可以复用其方法)

  3. 灵活度提高。(由于类的定义更加松散了,可以任意适配)

缺点

上面说到了适配器是架构与机器设配没有统一标准造成的,由于太松散,往往会导致适配器过于庞大,适配器需要兼容各种各样的情形,会导致适配器代码难以维护。

过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

代码实现

var googleMap = {        show:function(){            console.log('开始渲染谷歌地图');        }    };    var baiduMap = {        display:function(){            console.log('开始渲染百度地图');        }    };// 百度地图的适配器 将百度地图的show方法适配到map show上    var baiduMapAdapter = {        show:function(){            return baiduMap.display();        }    };    var renderMap = function(map){        if(map.show instanceof Function){            map.show();        }    };        renderMap(googleMap);  //输出:开始渲染谷歌地图    renderMap(baiduMapAdapter);    //输出:开始渲染百度地图

每日一道算法题

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

例:

输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1

输入:coins = [2], amount = 3输出:-1

tips: 动态规划 贪心算法

awosome

  1. 尤大从0开始教你写vue源码 www.bilibili.com/video/BV1my…

  2. 前端面试题汇总 github.com/lgwebdream/…

  3. 实用的绘图工具 github.com/fabricjs/fa…(提供转json 转svg 转图片等基础功能,帮你快速实现一个类ps的图片编辑器)

另外关注我的公众号每天推送一篇设计模式