国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 設(shè)計(jì)模式 十(適配器模式)

mochixuan / 668人閱讀

摘要:適配器模式是指將一個(gè)接口轉(zhuǎn)換成客戶端希望的另外一個(gè)接口,該模式使得原本不兼容的類可以一起工作。適配器有種角色目標(biāo)抽象角色定義客戶所期待的使用接口。接口源角色需要被適配的接口。接口適配器角色把源接口轉(zhuǎn)換成符合要求的目標(biāo)接口的設(shè)備。

適配器模式

是指將一個(gè)接口轉(zhuǎn)換成客戶端希望的另外一個(gè)接口,該模式使得原本不兼容的類可以一起工作。
舉個(gè)例子:macbook pro有一個(gè)HDMI接口,一條HDMI接口的數(shù)據(jù)線,現(xiàn)在要外接顯示器,而顯示器只有VGI接口,我們需要一個(gè)HDMI-VGI轉(zhuǎn)換器,這個(gè)轉(zhuǎn)換器其實(shí)起到的作用就是適配器,讓兩個(gè)不兼容的接口可以一起工作。

適配器有4種角色:

1.目標(biāo)抽象角色(Target):定義客戶所期待的使用接口。(VGI接口)
2.源角色(Adaptee):需要被適配的接口。(HDMI接口)
3.適配器角色(Adapter):把源接口轉(zhuǎn)換成符合要求的目標(biāo)接口的設(shè)備。(HDMI-VGI轉(zhuǎn)換器)
4.客戶端(client):例子中指的VGI接口顯示器。

實(shí)例 假設(shè)有兩種充電接口MicroUSB和USBTypec
function ChargingCord(name) {
  var _name = name || "默認(rèn):無(wú)接口"
  this.work = function () {
    console.log("使用" + _name + "接口");
  }
  this.getName = function () {
    return _name;
  }
  this.check = function (target) {
    return _name == target.getName();
  }
}

function MicroUSB() {
  this.__proto__ = new ChargingCord("MicroUSB");
}

function USBTypec() {
  this.__proto__ = new ChargingCord("USBTypec");
}
有兩種車分別有不同的充電接口
function Car(name, chargingCord) {
  var _name = name || "默認(rèn):車"
  var _chargingCord = chargingCord || new ChargingCord();
  this.getName = function () {
    return _name;
  };
  this.charge = function (target) {
    if (_chargingCord.check(target.getChargingCord())) {
      console.log(this.getName());
      _chargingCord.work();
      console.log("充電");
      target.charging();
    }
    else {
      console.log(this.getName()+"的"+_chargingCord.getName());
      console.log(target.getName()+"的"+target.getChargingCord().getName());
      console.log("接口不對(duì)無(wú)法充電");
    }
  }
}    
function Porsche911() {
  this.__proto__ = new Car("Porsche911", new USBTypec());
}    
function Porsche781() {
  this.__proto__ = new Car("Porsche781", new MicroUSB());
}
有兩種手機(jī)有不同的接受充電的接口
function Phone(name, chargingCord) {
  var _name = name || "默認(rèn):手機(jī)"
  var _chargingCord = chargingCord || new ChargingCord();
  this.getChargingCord = function () {
    return _chargingCord;
  };
  this.getName = function () {
    return _name;
  };
  this.charging = function () {
    console.log(_name);
    _chargingCord.work();
    console.log("接收");
  }
}    
function IPhone() {
  this.__proto__ = new Phone("IPhone", new USBTypec());
}    
function MIPhone() {
  this.__proto__ = new Phone("MIPhone", new MicroUSB());
}
我們分別用輛車個(gè)兩種手機(jī)充電
var porsche911 = new Porsche911();
var porsche781 = new Porsche781();    
var iPhone = new IPhone();
var miPhone = new MIPhone();    
console.log("-----------------------------------------");
porsche911.charge(iPhone);
console.log("-----------------------------------------");
porsche781.charge(miPhone);
console.log("-----------------------------------------");
porsche781.charge(iPhone);
console.log("-----------------------------------------");
結(jié)果
-----------------------------------------
Porsche911
使用USBTypec接口
充電
IPhone
使用USBTypec接口
接收
-----------------------------------------
Porsche781
使用MicroUSB接口
充電
MIPhone
使用MicroUSB接口
接收
-----------------------------------------
Porsche781的MicroUSB
IPhone的USBTypec
接口不對(duì)無(wú)法充電
-----------------------------------------
Porsche911的USBTypec
MIPhone的MicroUSB
接口不對(duì)無(wú)法充電
-----------------------------------------
所以我們要?jiǎng)?chuàng)建適配器函數(shù)
function PhoneUSBTypecToMicroUSB(Phone) {
  var _USBTypec = new ChargingCord("USBTypec");
  var _MicroUSB = new ChargingCord("MicroUSB");
  if (_USBTypec.check(Phone.getChargingCord())) {
    Phone.charging = function () {
      console.log(this.getName());
      _USBTypec.work();
      console.log("轉(zhuǎn)接");
      _MicroUSB.work();
      console.log("接收");
    }
    Phone.getChargingCord = function () {
      return _MicroUSB;
    };
    return Phone;
  }
  else {
    console.log("接口不對(duì)無(wú)法轉(zhuǎn)換");
  }
}

function PhoneMicroUSBToUSBTypec(Phone) {
  var _USBTypec = new ChargingCord("USBTypec");
  var _MicroUSB = new ChargingCord("MicroUSB");
  if (_MicroUSB.check(Phone.getChargingCord())) {
    Phone.charging = function () {
      console.log(this.getName());
      _MicroUSB.work();
      console.log("轉(zhuǎn)接");
      _USBTypec.work();
      console.log("接收");
    }
    Phone.getChargingCord = function () {
      return _USBTypec;
    };
    return Phone;
  }
  else {
    console.log("接口不對(duì)無(wú)法轉(zhuǎn)換");
  }
}

function PhoneDeleteInterface(Phone){
  delete Phone.charging;
  delete Phone.getChargingCord;
  return Phone;
}
再來(lái)測(cè)試接口轉(zhuǎn)換和充電情況
PhoneMicroUSBToUSBTypec(iPhone);
console.log("-----------------------------------------");
PhoneUSBTypecToMicroUSB(miPhone);
console.log("-----------------------------------------");
porsche781.charge(PhoneUSBTypecToMicroUSB(iPhone));
console.log("-----------------------------------------");
porsche911.charge(PhoneMicroUSBToUSBTypec(miPhone));
console.log("-----------------------------------------");
porsche781.charge(PhoneDeleteInterface(iPhone));
console.log("-----------------------------------------");
porsche911.charge(PhoneDeleteInterface(miPhone));
適配后結(jié)果
接口不對(duì)無(wú)法轉(zhuǎn)換
-----------------------------------------
接口不對(duì)無(wú)法轉(zhuǎn)換
-----------------------------------------
Porsche781
使用MicroUSB接口
充電
IPhone
使用USBTypec接口
轉(zhuǎn)接
使用MicroUSB接口
接收
-----------------------------------------
Porsche911
使用USBTypec接口
充電
MIPhone
使用MicroUSB接口
轉(zhuǎn)接
使用USBTypec接口
接收
-----------------------------------------
Porsche781的MicroUSB
IPhone的USBTypec
接口不對(duì)無(wú)法充電
-----------------------------------------
Porsche911的USBTypec
MIPhone的MicroUSB
接口不對(duì)無(wú)法充電
適配器模式優(yōu)點(diǎn)

1.可以讓任何兩個(gè)沒有關(guān)聯(lián)的類一起運(yùn)行。
2.提高了類的復(fù)用。
3.增加了類的透明度。
4.靈活性好。

適用場(chǎng)景

1.系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。
2.想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來(lái)引進(jìn)的類一起工作,這些源類不一定有一致的接口。
3.通過接口轉(zhuǎn)換,將一個(gè)類插入另一個(gè)類系中。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79502.html

相關(guān)文章

  • PHP設(shè)計(jì)模式():配器模式

    摘要:原文地址設(shè)計(jì)模式十適配器模式在設(shè)計(jì)模式七設(shè)計(jì)模式分類中我們提到過結(jié)構(gòu)設(shè)計(jì)模式,結(jié)構(gòu)設(shè)計(jì)模式專注于設(shè)計(jì)對(duì)象和實(shí)例的構(gòu)建組合過程。適配器模式在不修改現(xiàn)有代碼的基礎(chǔ)上,保留了架構(gòu)。 原文地址:PHP設(shè)計(jì)模式(十):適配器模式 Introduction 在PHP設(shè)計(jì)模式(七):設(shè)計(jì)模式分類中我們提到過結(jié)構(gòu)設(shè)計(jì)模式(Structural patterns),結(jié)構(gòu)設(shè)計(jì)模式專注于設(shè)計(jì)對(duì)象(Objec...

    paney129 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    Dionysus_go 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    vspiders 評(píng)論0 收藏0
  • 前端面試題小集

    摘要:一一個(gè)頁(yè)面上兩個(gè)左右鋪滿整個(gè)瀏覽器,要保證左邊的一直為,右邊的跟隨瀏覽器大小變化比如瀏覽器為,右邊為,瀏覽器為,右邊為,請(qǐng)寫出大概的代碼。如果需要使用,最好是通過動(dòng)態(tài)給添加屬性值,這樣可以繞開以上兩個(gè)問題。 一、一個(gè)頁(yè)面上兩個(gè)div左右鋪滿整個(gè)瀏覽器,要保證左邊的div一直為100px,右邊的div跟隨瀏覽器大小變化(比如瀏覽器為500,右邊div為400,瀏覽器為900,右邊div為...

    bawn 評(píng)論0 收藏0
  • PHP基礎(chǔ)

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對(duì)象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對(duì)那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場(chǎng)景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mochixuan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<