91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript的適配器模式介紹

發布時間:2021-08-31 18:54:46 來源:億速云 閱讀:141 作者:chen 欄目:web開發

本篇內容介紹了“JavaScript的適配器模式介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

介  紹

適配器模式(Adapter)是將一個類(對象)的接口(方法或屬性)轉化成客戶希望的另外一個接口(方法或屬性),適配器模式使得原本由于接口不兼容而不能一起工作的那些類(對象)可以一些工作。速成包裝器(wrapper)。

正  文

我們來舉一個例子,鴨子(Dock)有飛(fly)和嘎嘎叫(quack)的行為,而火雞雖然也有飛(fly)的行為,但是其叫聲是咯咯的(gobble)。如果你非要火雞也要實現嘎嘎叫(quack)這個動作,那我們可以復用鴨子的quack方法,但是具體的叫還應該是咯咯的,此時,我們就可以創建一個火雞的適配器,以便讓火雞也支持quack方法,其內部還是要調用gobble。

OK,我們開始一步一步實現,首先要先定義鴨子和火雞的抽象行為,也就是各自的方法函數:

//鴨子  var Duck = function(){   };  Duck.prototype.fly = function(){  throw new Error("該方法必須被重寫!");  };  Duck.prototype.quack = function(){  throw new Error("該方法必須被重寫!");  }   //火雞  var Turkey = function(){   };  Turkey.prototype.fly = function(){      throw new Error(" 該方法必須被重寫 !");  };  Turkey.prototype.gobble = function(){      throw new Error(" 該方法必須被重寫 !");  };

然后再定義具體的鴨子和火雞的構造函數,分別為:

//鴨子  var MallardDuck = function () {      Duck.apply(this);  };  MallardDuck.prototype = new Duck(); //原型是Duck  MallardDuck.prototype.fly = function () {      console.log("可以飛翔很長的距離!");  };  MallardDuck.prototype.quack = function () {      console.log("嘎嘎!嘎嘎!");  };   //火雞  var WildTurkey = function () {      Turkey.apply(this);  };  WildTurkey.prototype = new Turkey(); //原型是Turkey  WildTurkey.prototype.fly = function () {      console.log("飛翔的距離貌似有點短!");  };  WildTurkey.prototype.gobble = function () {      console.log("咯咯!咯咯!");  };

為了讓火雞也支持quack方法,我們創建了一個新的火雞適配器TurkeyAdapter:

var TurkeyAdapter = function(oTurkey){      Duck.apply(this);      this.oTurkey = oTurkey;  };  TurkeyAdapter.prototype = new Duck();  TurkeyAdapter.prototype.quack = function(){      this.oTurkey.gobble();  };  TurkeyAdapter.prototype.fly = function(){      var nFly = 0;      var nLenFly = 5;      for(; nFly < nLenFly;){          this.oTurkey.fly();          nFly = nFly + 1;      }  };

該構造函數接受一個火雞的實例對象,然后使用Duck進行apply,其適配器原型是Duck,然后要重新修改其原型的quack方法,以便內部調用oTurkey.gobble()方法。其fly方法也做了一些改變,讓火雞連續飛5次(內部也是調用自身的oTurkey.fly()方法)。

調用方法,就很明了了,測試一下便可以知道結果了:

var oMallardDuck = new MallardDuck();  var oWildTurkey = new WildTurkey();  var oTurkeyAdapter = new TurkeyAdapter(oWildTurkey);   //原有的鴨子行為  oMallardDuck.fly();  oMallardDuck.quack();   //原有的火雞行為  oWildTurkey.fly();  oWildTurkey.gobble();   //適配器火雞的行為(火雞調用鴨子的方法名稱)  oTurkeyAdapter.fly();  oTurkeyAdapter.quack();

總  結

那合適使用適配器模式好呢?如果有以下情況出現時,建議使用:

  1. 使用一個已經存在的對象,但其方法或屬性接口不符合你的要求;

  2. 你想創建一個可復用的對象,該對象可以與其它不相關的對象或不可見對象(即接口方法或屬性不兼容的對象)協同工作;

  3. 想使用已經存在的對象,但是不能對每一個都進行原型繼承以匹配它的接口。對象適配器可以適配它的父對象接口方法或屬性。

另外,適配器模式和其它幾個模式可能容易讓人迷惑,這里說一下大概的區別:

  1. 適配器和橋接模式雖然類似,但橋接的出發點不同,橋接的目的是將接口部分和實現部分分離,從而對他們可以更為容易也相對獨立的加以改變。而適配器則意味著改變一個已有對象的接口。

  2. 裝飾者模式增強了其它對象的功能而同時又不改變它的接口,因此它對應程序的透明性比適配器要好,其結果是裝飾者支持遞歸組合,而純粹使用適配器則是不可能的。

  3. 代理模式在不改變它的接口的條件下,為另外一個對象定義了一個代理。

“JavaScript的適配器模式介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福安市| 绥德县| 永春县| 琼海市| 广南县| 石林| 和林格尔县| 泾阳县| 奉节县| 连云港市| 化州市| 土默特右旗| 尉犁县| 徐州市| 千阳县| 突泉县| 吉首市| 腾冲县| 七台河市| 图木舒克市| 龙海市| 铜陵市| 常德市| 保康县| 铜川市| 安康市| 五指山市| 长寿区| 松滋市| 宣威市| 即墨市| 松江区| 平罗县| 阳东县| 陈巴尔虎旗| 利辛县| 囊谦县| 兴化市| 吴旗县| 滨州市| 新晃|