zoukankan      html  css  js  c++  java
  • JavaScript设计模式_14_适配器模式

    适配器模式是一种相对简单的设计模式,它的出现主要是为了解决两个软件接口不统一的问题。

    /**
     * pre:适配器模式
     */
    //----------- 示例1 ----------
    /**
     * 有一个地图渲染器,可以渲染百度地图,也可以渲染谷歌地图。
     * 但百度地图提供的接口是display方法,谷歌是show方法,为了统一,我们写一个百度地图适配器。
     * 代码如下:
     */
    var googleMap = {
        show: function() {
            console.log("谷歌地图.");
        }
    };
    var baiduMap = {
        display: function() {
            console.log("百度地图.");
        }
    };
    var baiduMapAdapter = {
        show: function() {
            baiduMap.display();
        }
    };
    
    var renderMap = function(map) {
        if(map.show instanceof Function) {
            map.show();
        }
    };
    renderMap(googleMap);
    renderMap(baiduMap);// 会报错
    renderMap(baiduMapAdapter);// 执行正常
    //---------- 示例2 ------------
    /**
     * 某天我们从第三方资源获取了广东省一些城市的信息,并将它们渲染在地图上,
     * 代码如下:
     */
    var getGuangdongCity = function() {
        var guangdongCity = [{
            name: "shenzhen",
            id: 11
        }, {
            name: "guangzhou",
            id: 12
        }, {
            name: "zhuhai",
            id: 13
        }];
        return guangdongCity;
    };
    
    var render = function(fn) {
        console.log("开始渲染地图.");
        document.writeln(JSON.stringify(fn()));
    };
    
    render(getGuangdongCity);
    
    /* 过了两天,我们又获取了广东省更新更全的数据,要求格式为:
     * var guangdongCity = {
     *     shenzhen:11,
     *  guangzhou:12,
     *  zhuhai:13,
     *  jiangmen:14
     * }
     * 我们写一个适配器用于转换为新的数据格式,如下:
     */
    var addressAdapter = function(oldAddressfn) {
        var address = {},
            oldAddress = oldAddressfn();
        for(var i = 0, a; a = oldAddress[i++];) {
            address[a.name] = a.id;
        }
        return function() {
            return address
        };
    };
    render(addressAdapter(getGuangdongCity));
  • 相关阅读:
    c# 键值数据保存XML文件
    c# 封装 Request操作类
    c# 获取客户端IP
    c#封装DBHelper类
    c# Cache 使用实例
    c#cookie读取写入操作
    c# Session写入读取操作
    ABAP-HTTP支持
    WDA-文档-基础篇/进阶篇/讨论篇
    UI5-文档-4.38-Accessibility
  • 原文地址:https://www.cnblogs.com/stinchan/p/7065823.html
Copyright © 2011-2022 走看看