适配器在现实场景中其实有很多, 电源的适配器, USB串口桥接到Mac Pro 上到TYPE-c 接口上,在现实生活中几乎无处不在,同样的,在计算机程序中,为了适配不同架构的机器,兼容不同的浏览器厂商,通过增设适配器的写法,达到兼容的目的。
没有什么程序是加一层抽象解决不了的,那么适配器就可以是这个抽象。
适配器是由于架构,机器设备的不统一产生的产物,有以下优点。
上面说到了适配器是架构与机器设配没有统一标准造成的,由于太松散,往往会导致适配器过于庞大,适配器需要兼容各种各样的情形,会导致适配器代码难以维护。
过多地使用适配器,会让系统非常凌乱,不易整体进行把握。比如,明明看到调用的是 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: 动态规划 贪心算法