結構模式類型:適配器模式

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章