Skip to content

Commit a7b587a

Browse files
committed
适配器模式
1 parent d24ffdc commit a7b587a

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

sixteen-chapter/wrapper.js

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
//适配器模式
2+
//现实中的适配器,插头转化器,笔记本电源,usb转接口
3+
// 适配器模式的应用
4+
// 渲染地图为例
5+
var googleMap = {
6+
show:() => {
7+
console.log('googleMap')
8+
}
9+
}
10+
11+
var baiduMap = {
12+
show:() => {
13+
console.log('baiduMap')
14+
}
15+
}
16+
17+
var renderMap = function (map) {
18+
if(map.show instanceof Function){
19+
map.show()
20+
}
21+
}
22+
23+
renderMap(googleMap);
24+
renderMap(baiduMap);
25+
26+
// baiduMap 提供的显示地图的方法不叫 show 而叫 display 呢
27+
var baiduMap = {
28+
display:() => {
29+
console.log('baiduMap');
30+
}
31+
}
32+
33+
var baiduMapAdapter = {
34+
show:function(){
35+
return baiduMap.display();
36+
}
37+
}
38+
39+
renderMap(googleMap);
40+
renderMap(baiduMap);
41+
42+
// 假设我们正在编写一个渲染广东省地图的页面。
43+
// 目前从第三方资源 里获得了广东省的所有城市以及它们所对应的 ID
44+
var getGuangDongCity = function(){
45+
var GuangDongCity = [
46+
{
47+
name:'shenzhen',
48+
id:11
49+
},
50+
{
51+
name:'guangzhou',
52+
id:12
53+
}
54+
]
55+
56+
return GuangDongCity
57+
}
58+
59+
var render = function(fn){
60+
console.log('render GuangDongCity map')
61+
document.write(JSON.stringify(fn()))
62+
};
63+
64+
render(getGuangDongCity);
65+
66+
// 在网上找到了另外一些数据资源,这次的 数据更加全面,新的数据结构
67+
var GuangDongCity = {
68+
shenzhen:11,
69+
guangzhou:12,
70+
zhuhai:13
71+
}
72+
73+
var getGuangDongCity = function(){
74+
var GuangDongCity = [
75+
{
76+
name:'shenzhen',
77+
id:11
78+
},
79+
{
80+
name:'guangzhou',
81+
id:12
82+
}
83+
]
84+
85+
return GuangDongCity;
86+
}
87+
88+
var render = function(fn){
89+
console.log('render GuangDongCity map')
90+
document.write(JSON.stringify(fn()))
91+
}
92+
93+
var addressAdapter = function(oldAddressfn){
94+
var address = {};
95+
var oldAddress = oldAddressfn();
96+
97+
for(var i=0,c;c=oldAddress[i++]){
98+
address[c.name] = c.id;
99+
}
100+
101+
return function(){
102+
return address;
103+
}
104+
}
105+
106+
render(addressAdapter(getGuangDongCity));
107+
108+
// 适配器模式主要用来解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实 现的,也不考虑它们将来可能会如何演化

0 commit comments

Comments
 (0)