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