美文网首页工作生活
结构模式类型:适配器模式

结构模式类型:适配器模式

作者: Ricoywang | 来源:发表于2019-07-02 14:38 被阅读0次

    Adapter,将一个类(对象)的接口(方法或者属性)转化为另一个接口,以满足用户需求,使类(对象)之间接口的不兼容问题通过适配器得以解决

    适用场景

    • 1、使用一个已经存在的对象,但其方法或属性接口不符合你的要求;
    • 2、你想创建一个可复用的对象,该对象可以与其它不相关的对象或不可见对象(即接口方法或属性不兼容的对象)协同工作;
    • 3、想使用已经存在的对象,但是不能对每一个都进行原型继承以匹配它的接口。对象适配器可以适配它的父对象接口方法或属性。

    示例

    我们想让Duck 和Turkey 的方法接口一致方便新功能使用,由于是老的代码我们不清楚直接修改是否会造成老代码无法使用,于是我们通过TurkeyAdapter做兼容

    Class Duck {
      fly () {
      }
      quack () {
      }
    }
    Class Turkey {
      fly () {
      }
      gobble () {
      }
    }
    // 适配器
    Class TurkeyAdapter {
      constructor (turkey) {
        this.turkey = turkey
      }
      fly () {
        this.turkey.fly()
      }
      quack () { // 原本只有gobble 方法,通过适配器改造为quack方法
        this.turkey.gobble()
      }
    }
    
    var duck = new Duck();
    var turkey = new Turkey();
    var turkeyAdapter = new TurkeyAdapter(turkey);
    
    //原有的鸭子行为
    duck.fly();
    duck.quack();
    
    //原有的火鸡行为
    turkey.fly();
    turkey.gobble();
    
    //适配器火鸡的行为(火鸡调用鸭子的方法名称)
    turkeyAdapter.fly();
    turkeyAdapter.quack();
    

    适配器模式也经常用于日常的数据处理上,比如把一个有序的数组转化成我们需要的对象格式:

    const arr = ['Javascript', 'book', '前端编程语言', '8月1日']
    function arr2objAdapter(arr) {    // 转化成我们需要的数据结构
      return {
        name: arr[0],
        type: arr[1],
        title: arr[2],
        time: arr[3]
      }
    }
    
    const adapterData = arr2objAdapter(arr)
    

    相关文章

      网友评论

        本文标题:结构模式类型:适配器模式

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