美文网首页
JS设计模式-适配器模式

JS设计模式-适配器模式

作者: 林海_Mense | 来源:发表于2019-03-16 15:39 被阅读0次
    介绍
    • 旧接口模式和使用者不兼容
    • 中间加一个适配器转接口
      比如你去香港或者出国去一些国家,他们的插排接口和我们都不一样,我要充电不能直接用,这个时候就需要一个适配器来转换一下电压。
    UML类图
    适配器模式UML类图
    代码演示
    class Adaptee {
      specificRequest() {
          return "德国标准插头";
      }
    }
    
    class Target {
      constructor() {
        this.adaptee = new Adaptee()
      }
      request() {
        let info = this.adaptee.specificRequest();
        return `${info} - 转换器 - 中国插头`  
      }
    }
    // 测试
    let target = new Target();
    let res = target.request();
    console.log(res);
    
    场景
    • 封装旧接口
    • vue computed
      封装旧接口
    // 自己封装的 ajax 使用方法如下
    ajax({
      url: '/getData',
      type: 'post',
      dataType: 'json',
      data: {
          id: "123"
      }
    })
    .done(function(){})
    // 但因为历史原因,代码中全都是:
    // $.ajax({...})
    

    如果这时候不适用jquery了,手动去一个个替换$.ajax不靠谱,旧接口不兼容,这时候我们只需要一个适配器来封装旧接口来实现,而且以后的也还可以继续像Jquery使用

    // 做一层适配器
    var $ = {
      ajax: function(options){
        return ajax(options);
      }
    }
    

    vue的计算属性也是一个适配器,这里我拿官网demo来展示下,可以仔细品味下

    <div id="app">
      <p>原始字符串: {{ message }}</p>
      <p>计算后反转字符串: {{ reversedMessage }}</p>
    </div>
     
    <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: 'Runoob!'
      },
      computed: {
        // 计算属性的 getter
        reversedMessage: function () {
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join('')
        }
      }
    })
    </script>
    
    设计原则验证
    • 将旧接口和使用者进行分离
    • 符合开放封闭原则

    本文资料来自慕课网-双越老师-Javascript 设计模式系统讲解与应用视频课程

    相关文章

      网友评论

          本文标题:JS设计模式-适配器模式

          本文链接:https://www.haomeiwen.com/subject/jagauqtx.html