javascript適配器模式和組合模式原理與實現方法詳解

一、適配器模式 1、作用:主要解決兩個軟件實體間接口不兼容的問題 2、實例 (1)地圖渲染的適配 //谷歌和百度地圖的渲染地圖調用的方式不一樣 var googleMap = { show: function () { consol

一、適配器模式

1、作用:主要解決兩個軟件實體間接口不兼容的問題

2、實例

(1)地圖渲染的適配

//谷歌和百度地圖的渲染地圖調用的方式不一樣
        var googleMap = {
            show: function () {
                console.log('開始渲染谷歌地圖')
            }
        }
        var BaiduMap = {
            display: function () {
                console.log('開始渲染谷歌地圖')
            }
        }
        //我們 程序中的渲染地圖方法入下
        var renderMap = function (map) {
            if (map.show instanceof Function) {
                map.show()
            }
        }
        //baiduMap 來源于第三方,不能改變其內部構造,那么需要對百度地圖做一下適配
        var BaiduAdapter = {
            show: function () {
                return BaiduMap.display()
            }
        }

(2)接口數據格式的統一適配

 //接口數據格式的統一適配
        var cityData = [{
                name: 'shenzhen',
                id: 11
            },
            {
                name: 'guangzhou',
                id: 12
            }
        ]
        //新數據源
        var newcityData = {
            'shenzhen': 11,
            'guanzghou': 12,
            'zhuhai': 12
        }
        //數據格式轉換適配器
        var addressAdapter = function (data) {
            var address = [];
            for (var i in data) {
                var objTemp = {};
                objTemp.name = i;
                objTemp.id = data[i];
                address.push(objTemp)
            }
            return address;
        }
        console.log(addressAdapter(newcityData))

運行結果如下:

二、組合模式

1、圖片示意

2、組合模式的例子--掃描文件夾

文件夾和文件之間的關系,非常適用組合模式來描述。文件夾里既可以包含文件,又可以包含其他文件夾。

 //掃描文件夾 folder 和 file 兩個類
        var Folder = function (name) {
            this.name = name;
            this.file = []
        }
        Folder.prototype.add = function (file) {
            this.file.push(file)
        }
        Folder.prototype.scan = function () {
            console.log('開始掃描文件夾'+this.name)
            for(var i=0;i<this.file.length;i++){
                this.file[i].scan()
            }
        }
        var File = function(name){
            this.name = name;
        }
        File.prototype.add = function(){
            throw new Error('文件下面不能再添加文件')
        }
        File.prototype.scan = function () {
            console.log('開始掃描文件'+this.name)
        }
        var chinese = new File('chinese')
        var math = new File('math')
        var English = new File('English')
        var hobby = new File('hobby')
        var folder1=new Folder('subject');
        folder1.add(chinese)
        folder1.add(math)
        folder1.add(English)
        var folder2=new Folder('entertainment')
        folder2.add(hobby)
        var folder=new Folder('doc')
        folder.add(folder1)
        folder.add(folder2)
        console.log(folder)
        folder.scan()

運行結果如下:

更多設計模式相關知識點,還可以參考本站文章:

https://www.jb51.net/article/252965.htm

https://www.jb51.net/article/27973.htm

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 中文字幕丰满伦子无码| 免费高清a级毛片在线播放| 国产对白受不了了中文对白| 午夜精品视频5000| 中文字幕亚洲综合久久综合| 色噜噜狠狠一区二区三区果冻| 日本高清不卡免费| 国产免费av片在线播放| 久久免费国产视频| 被吃奶跟添下面视频| 日本午夜精品一区二区三区电影| 国内精品久久久久影院一蜜桃 | 全彩口工番日本漫画| 一区二区三区视频免费| 精品一区二区三区在线视频| 日韩毛片无码永久免费看| 在线观看免费视频一区| 亚洲精品国产综合久久一线 | 最近的中文字幕大全免费版| 国产片AV片永久免费观看| 久久精品无码精品免费专区| 黄色一级毛片免费| 日日噜噜夜夜狠狠久久aⅴ| 国产99久9在线视频| 久久香蕉国产线看观看99| 香蕉大伊亚洲人在线观看| 日产精品一二三四区国产| 再深点灬舒服灬太大了网站| a级毛片免费完整视频| 精精国产XXXX视频在线播放| 嫩草影院在线播放www免费观看 | 美国一级毛片免费看| 巨龙征母全文王雪琴笔趣阁| 依依成人精品视频在线观看| 91蜜桃传媒一二三区| 案件小说h阿龟h全文阅读| 国产乱码精品一区二区三区中文| 中国成人在线视频| 波多野结衣作品在线观看| 国产精品jizz在线观看免费| 久久久久久国产精品美女|