最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript門面模式詳解

 更新時(shí)間:2017年10月19日 16:36:23   作者:與你在巔峰相會(huì)  
這篇文章主要為大家詳細(xì)介紹了JavaScript門面模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)系統(tǒng)的一個(gè)門面對(duì)象進(jìn)行,這就是門面模式。

門面模式具備如下兩個(gè)角色:

1. 門面角色

客戶端可以調(diào)用這個(gè)角色方法,此角色中有子系統(tǒng)的應(yīng)用(知曉相關(guān)的(一個(gè)或多個(gè))子系統(tǒng)的功能和責(zé)任)。本角色會(huì)將所有從客戶端發(fā)來的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去。

2. 子系統(tǒng)角色

可以同時(shí)有一個(gè)或多個(gè)子系統(tǒng)。每一個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類,而是一些類的集合。每一個(gè)子系統(tǒng)都可以被客戶端直接調(diào)用(這樣客戶端代碼會(huì)多),或被門面角色調(diào)用。子系統(tǒng)并不知道門面的存在,對(duì)于子系統(tǒng)而言,門面僅僅是另一個(gè)客戶端而已。

 下面我們來看一個(gè)可以提現(xiàn)門面模式的簡(jiǎn)單需求:主人為自己的寵物狗辦理的相應(yīng)的寵物領(lǐng)養(yǎng)證件

從這個(gè)簡(jiǎn)單的需求中我們可以大致分析出我們需要:主人Person類和寵物狗Dog類 的一些相關(guān)信息

在下面的例子中國(guó)會(huì)涉及到接口的驗(yàn)證,現(xiàn)在先將代碼貼出來

//(定義一個(gè)靜態(tài)方法來實(shí)現(xiàn)接口與實(shí)現(xiàn)類的直接檢驗(yàn)
//靜態(tài)方法不要寫出Interface.prototype ,因?yàn)檫@是寫到接口的原型鏈上的
//我們要把靜態(tài)的函數(shù)直接寫到類層次上
//定義一個(gè)接口類
var Interface=function (name,methods) {//name:接口名字
  if(arguments.length<2){
    alert("必須是兩個(gè)參數(shù)")
  }
  this.name=name;
  this.methods=[];//定義一個(gè)空數(shù)組裝載函數(shù)名
  for(var i=0;i<methods.length;i++){
    if(typeof methods[i]!="string"){
      alert("函數(shù)名必須是字符串類型");
    }else {
      this.methods.push( methods[i]);
    }
  }
};
Interface.ensureImplement=function (object) {
  if(arguments.length<2){
    throw new Error("參數(shù)必須不少于2個(gè)")
    return false;
  }
  for(var i=1;i<arguments.length;i++){
    var inter=arguments[i];
    //如果是接口就必須是Interface類型
    if(inter.constructor!=Interface){
      throw new Error("如果是接口類的話,就必須是Interface類型");
    }
    //判斷接口中的方法是否全部實(shí)現(xiàn)
    //遍歷函數(shù)集合
    for(var j=0;j<inter.methods.length;j++){
      var method=inter.methods[j];//接口中所有函數(shù)

      //object[method]傳入的函數(shù)
      //最終是判斷傳入的函數(shù)是否與接口中所用函數(shù)匹配
      if(!object[method]||typeof object[method]!="function" ){
      //實(shí)現(xiàn)類中必須有方法名字與接口中所用方法名相同
        throw new Error("實(shí)現(xiàn)類中沒有完全實(shí)現(xiàn)接口中的所有方法")
      }
    }
  }
}

(1)主人類(Person類)

  function Person() {
   this.name="測(cè)試";
   this.address="居住在中國(guó)";
   this.getInfo=function () {
     return "名字"+this.name+" 地址"+this.address;
   };
   this.learn=function () {
     alert("學(xué)習(xí)的方法");
   }
    this.marray=function () {
      alert("marray");
    }
   //驗(yàn)證接口
    Interface.ensureImplement(this,PersonDao);//驗(yàn)證該類是否全部實(shí)現(xiàn)接口中的方法
  }

(2)寵物狗(Dog類)

var DogDao=new Interface("DogDao",["getInfo","call","run"]);

  var Dog=function () {
    this.name="gg";
 this.getInfo=function () {
   return "狗狗的名字"+this.name;
 };
 this.call=function () { };
 this.run=function () {};
 Interface.ensureImplement(this,DogDao);//驗(yàn)證接口
  }

(3)現(xiàn)在可以主人可以給自己的寵物狗辦理寵物領(lǐng)養(yǎng)證件了   -----客戶端代碼

 第一種方法:不用門面的方式客戶端的代碼如下

function action(person,dog) {
  var r="GG"+new Date().getDay()+Math.floor(Math.random()*11);
  var str="辦證成功:編號(hào)"+r
   +"<br/>主人信息"+person.getInfo()
  +"<br>狗狗的信息:"+dog.getInfo();
  return str;
}document.write(action(new Person(),new Dog()));

第二種方法:使用門面模式-----將復(fù)雜的事交給門面來做,客戶端壓力可以減小

  #1:門面中進(jìn)行如下的處理

 function facade(person,dog) {
   var r="GG"+new Date().getDay()+Math.floor(Math.random()*11);
   var str="辦證成功:編號(hào)"+r
     +"<br/>主人信息"+person.getInfo()
     +"<br>狗狗的信息:"+dog.getInfo();
   this.action=function () {//相當(dāng)于實(shí)例的方法
     return str;
   };
 }

#2:客戶端負(fù)責(zé)使用的代碼為

function action2(person,dog) {
   document.write(new facade(person,dog).action());
}
action2(new Person(),new Dog());

總結(jié),我們可以看出不適用門面模式的客戶端需要處理較為復(fù)雜的業(yè)務(wù),使用門面后,在門面中處理復(fù)雜的東西,而客戶端只需要簡(jiǎn)單的調(diào)用即可。

 一個(gè)簡(jiǎn)單理解門面模式的圖結(jié)構(gòu):

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js生成二維碼的示例代碼

    js生成二維碼的示例代碼

    這篇文章主要介紹了js生成二維碼的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • javascript模擬php函數(shù)in_array

    javascript模擬php函數(shù)in_array

    就是判斷一個(gè)元素是否存在于數(shù)組中的函數(shù),既然js里string都有indexOf函數(shù),為什么不在Array對(duì)象里設(shè)置一個(gè)這樣的函數(shù)呢,其實(shí)就用indexOf這個(gè)思想挺好的,不知道制定JS標(biāo)準(zhǔn)的人是基于什么考慮,把這樣一個(gè)如此常用的功能沒考慮在內(nèi)的。
    2015-04-04
  • 深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解

    深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解

    這篇文章主要介紹了深入理解JavaScript系列(28):設(shè)計(jì)模式之工廠模式詳解,工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類,需要的朋友可以參考下
    2015-03-03
  • JS實(shí)現(xiàn)Select的option上下移動(dòng)的方法

    JS實(shí)現(xiàn)Select的option上下移動(dòng)的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)Select的option上下移動(dòng)的方法,涉及JavaScript動(dòng)態(tài)操作頁面元素的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-03-03
  • JS實(shí)現(xiàn)動(dòng)畫兼容性的transition和transform實(shí)例分析

    JS實(shí)現(xiàn)動(dòng)畫兼容性的transition和transform實(shí)例分析

    這篇文章主要介紹了JS實(shí)現(xiàn)動(dòng)畫兼容性的transition和transform方法,結(jié)合實(shí)例形式分析了transition和transform方法針對(duì)手機(jī)端瀏覽器兼容性問題上的相關(guān)處理技巧,需要的朋友可以參考下
    2016-12-12
  • JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題

    JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題

    這篇文章主要介紹了JavaScript Date對(duì)象詳解及時(shí)間戳和時(shí)間的相互轉(zhuǎn)換問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • JS字符串false轉(zhuǎn)boolean的方法(推薦)

    JS字符串false轉(zhuǎn)boolean的方法(推薦)

    下面小編就為大家?guī)硪黄狫S字符串false轉(zhuǎn)boolean的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • javascript 中的繼承實(shí)例詳解

    javascript 中的繼承實(shí)例詳解

    這篇文章主要介紹了javascript 中的繼承實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 用js的document.write輸出的廣告無阻塞加載的方法

    用js的document.write輸出的廣告無阻塞加載的方法

    這篇文章主要介紹了用js的document.write輸出的廣告無阻塞加載的方法,需要的朋友可以參考下
    2014-06-06
  • 不使用瀏覽器運(yùn)行javascript代碼的方法

    不使用瀏覽器運(yùn)行javascript代碼的方法

    用js寫一段小程序,但是又覺得使用瀏覽器去運(yùn)行挺麻煩的,下面為大家介紹下如何使用java程序調(diào)用javascript程序,有類似需求的朋友可以參考下哈,希望對(duì)大家有所幫助
    2013-07-07

最新評(píng)論

长宁县| 苏尼特右旗| 丰县| 荔波县| 永胜县| 襄垣县| 台山市| 上林县| 高阳县| 阳山县| 梅州市| 大关县| 宣恩县| 孟州市| 哈尔滨市| 祁东县| 孟州市| 舒兰市| 静乐县| 武强县| 班玛县| 巫溪县| 盐源县| 共和县| 曲靖市| 寻乌县| 北川| 淮滨县| 淮南市| 新竹市| 敦煌市| 南召县| 松桃| 松阳县| 奉贤区| 洪雅县| 肃北| 遂平县| 长顺县| 关岭| 南通市|