中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

設(shè)計(jì)模式中的組合模式在JavaScript程序構(gòu)建中的使用
來源:易賢網(wǎng) 閱讀:1524 次 日期:2016-06-27 15:16:40
溫馨提示:易賢網(wǎng)小編為您整理了“設(shè)計(jì)模式中的組合模式在JavaScript程序構(gòu)建中的使用”,方便廣大網(wǎng)友查閱!

組合模式一般是將一系列類似的小對(duì)象組合成大的對(duì)象,由這個(gè)大對(duì)象提供接口來對(duì)里面的小對(duì)象進(jìn)行操作,下買呢我們來詳細(xì)看一下設(shè)計(jì)模式中的組合模式在JavaScript程序構(gòu)建中的使用

定義

組合,顧名思義是指用包含多個(gè)部件的對(duì)象創(chuàng)建單一實(shí)體。 這個(gè)單一實(shí)體將用作所有這些部件的訪問點(diǎn),雖然這大大簡化了操作,但也可能具有相當(dāng)?shù)钠垓_性,因?yàn)闆]有哪種隱性方式明確表明該組合包含多少部件。

組合模式的目標(biāo)是解耦客戶程序與復(fù)雜元素內(nèi)部架構(gòu),使得客戶程序?qū)Υ凶釉囟家灰曂省?/P>

每個(gè)子節(jié)點(diǎn)都可以使復(fù)雜的存在,對(duì)于父節(jié)點(diǎn)來說,不需要知道子節(jié)點(diǎn)的復(fù)雜性或者實(shí)現(xiàn)子節(jié)點(diǎn)的復(fù)雜性,只需要關(guān)注子節(jié)點(diǎn)的特定方法,便可以使用子節(jié)點(diǎn)。簡化了父和子之間的關(guān)系。

對(duì)于子節(jié)點(diǎn)來說也是一樣的,過多的接口暴露有時(shí)候也是一種濫用,同時(shí)也減少了對(duì)外部的依賴。

示例

我們最好使用例證解說組合。 在下圖中,您可以看到兩種不同類型的對(duì)象: 容器和庫是組合,圖像是葉片。 組合可承載子項(xiàng),但一般不會(huì)實(shí)施更多行為。 葉片包含絕大多數(shù)行為,但不能承載子項(xiàng),至少在傳統(tǒng)的組合示例中不可以。

名單

此示例創(chuàng)建圖片庫,將其作為組合模式示例。 只有三個(gè)層次: 專輯、庫和圖像。 專輯和庫將作為組合,圖像是葉片,如上面那張圖所示。這是一種比組合本身需求更加明確的結(jié)構(gòu),但對(duì)于本示例而言,將這些層次僅限制為組合或葉片很有意義。 標(biāo)準(zhǔn)組合不會(huì)限制哪些結(jié)構(gòu)層次可以具有葉片,也不會(huì)限制葉片數(shù)量。

要開始操作,應(yīng)首先創(chuàng)建用于專輯和庫的 GalleryComposite“類”。 請(qǐng)注意,我正在使用 jQuery 執(zhí)行 DOM 操作以簡化過程。

var GalleryComposite = function (heading, id) {

  this.children = [];

  this.element = $('<div id="' + id + '" class="composite-gallery"></div>')

  .append('<h2>' + heading + '</h2>');

}

GalleryComposite.prototype = {

  add: function (child) {

    this.children.push(child);

    this.element.append(child.getElement());

  },

  remove: function (child) {

    for (var node, i = 0; node = this.getChild(i); i++) {

      if (node == child) {

        this.children.splice(i, 1);

        this.element.detach(child.getElement());

        return true;

      }

      if (node.remove(child)) {

        return true;

      }

    }

    return false;

  },

  getChild: function (i) {

    return this.children[i];

  },

  hide: function () {

    for (var node, i = 0; node = this.getChild(i); i++) {

      node.hide();

    }

    this.element.hide(0);

  },

  show: function () {

    for (var node, i = 0; node = this.getChild(i); i++) {

      node.show();

    }

    this.element.show(0);

  },

  getElement: function () {

    return this.element;

  }

}

這個(gè)位置有點(diǎn)棘手,能否允許我再更多的解釋一下? 我們同時(shí)使用 add, remove, 和getChild getChild 方法構(gòu)建這一組合。 本示例不會(huì)實(shí)際使用 remove 和 getChild,但它們對(duì)于創(chuàng)建動(dòng)態(tài)組合非常有用。 hide, show, 和getElement 方法則用來操縱 DOM。 該組合旨在作為庫的 表示在頁面上向用戶展示。 該組合可通過 hide 和 show控制這些庫元素。 如果在專輯上調(diào)用 hide,則整個(gè)專輯將消失,或者您也可以只在單一圖像上調(diào)用它,這樣只有該圖像會(huì)消失。

現(xiàn)在,創(chuàng)建一個(gè) GalleryImage類。 請(qǐng)注意,它使用的方法與 GalleryComposite完全相同。 換句話說,它們實(shí)現(xiàn)同一接口,不同的是該圖像是葉片,因此不會(huì)實(shí)際對(duì)子項(xiàng)相關(guān)方法執(zhí)行任何操作,就像不具有任何子項(xiàng)一樣。 必須使用同一接口運(yùn)行該組合,因?yàn)榻M合元素不知道自身添加的是另一個(gè)組合元素還是葉片,因此如果嘗試在其子項(xiàng)上調(diào)用這些方法,則需要運(yùn)行完全正常,沒有任何錯(cuò)誤。

var GalleryImage = function (src, id) {

  this.children = [];

  this.element = $('<img />')

  .attr('id', id)

  .attr('src', src);

}

GalleryImage.prototype = {

  // Due to this being a leaf, it doesn't use these methods,

  // but must implement them to count as implementing the

  // Composite interface

  add: function () { },

  remove: function () { },

  getChild: function () { },

  hide: function () {

    this.element.hide(0);

  },

  show: function () {

    this.element.show(0);

  },

  getElement: function () {

    return this.element;

  }

}

鑒于您已經(jīng)構(gòu)建了對(duì)象原型,您現(xiàn)已能夠進(jìn)行使用。 從下面您可以看到實(shí)際構(gòu)建圖像庫的代碼。

var container = new GalleryComposite('', 'allgalleries');

var gallery1 = new GalleryComposite('Gallery 1', 'gallery1');

var gallery2 = new GalleryComposite('Gallery 2', 'gallery2');

var image1 = new GalleryImage('image1.jpg', 'img1');

var image2 = new GalleryImage('image2.jpg', 'img2');

var image3 = new GalleryImage('image3.jpg', 'img3');

var image4 = new GalleryImage('image4.jpg', 'img4');

gallery1.add(image1);

gallery1.add(image2);

gallery2.add(image3);

gallery2.add(image4);

container.add(gallery1);

container.add(gallery2);

// Make sure to add the top container to the body,

// otherwise it'll never show up.

container.getElement().appendTo('body');

container.show();

組合模式之利:

簡單的操作也能產(chǎn)生復(fù)雜的結(jié)果,只需對(duì)最頂層的對(duì)象執(zhí)行操作,讓每一個(gè)子對(duì)象自己傳遞這個(gè)操作即可。這對(duì)于那些再三執(zhí)行的操作尤其有用。

在組合模式中,各個(gè)對(duì)象之間的耦合非常松散。只要它們實(shí)現(xiàn)了同樣的接口那么改變它們的位置或互換它們只是舉手之勞。著促進(jìn)了代碼的重用,也有利于代碼重構(gòu)。

每當(dāng)對(duì)頂層組合對(duì)象執(zhí)行一個(gè)操作時(shí),實(shí)際上是在對(duì)整個(gè)結(jié)構(gòu)進(jìn)行深度優(yōu)先的搜索以查找節(jié)點(diǎn),而創(chuàng)建組合對(duì)象的程序員對(duì)這些細(xì)節(jié)一無所知。在這個(gè)層次體系中添加、刪除和查找節(jié)點(diǎn)都非常容易。

組合模式之弊:

組合對(duì)象的易用性可能掩蓋了它所支持的每一種操作的代價(jià)。由于組合對(duì)象調(diào)用的任何操作都會(huì)被傳遞到它的所有子對(duì)象如果這個(gè)層次體系很大的話,系統(tǒng)的性能將會(huì)受到影響。組合模式的正常運(yùn)作需要用到某種形式的接口。

組合對(duì)象和節(jié)點(diǎn)類被用作HTML元素的包裝工具時(shí),組合對(duì)象必須遵守HTML的使用規(guī)則。例如,表格就很難轉(zhuǎn)化為一個(gè)組合對(duì)象。

接口檢查越嚴(yán)格,組合對(duì)象類也就越可靠。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
日韩亚洲国产欧美| 久久久亚洲国产天美传媒修理工 | 午夜精品久久久久久| 亚洲一区二区精品视频| 中文亚洲字幕| 麻豆国产精品777777在线| 欧美va亚洲va日韩∨a综合色| 欧美精品手机在线| 亚洲欧美日本伦理| 欧美成人午夜剧场免费观看| 9久re热视频在线精品| 亚洲欧洲99久久| 久久精品网址| 欧美视频精品在线| 亚洲电影免费观看高清完整版在线| 亚洲在线网站| 国产精品人人做人人爽| 亚洲欧美一区二区激情| 国产精品久久久久免费a∨大胸 | 欧美黑人国产人伦爽爽爽| 国产精品久久久久久久久动漫| 亚洲国产精品一区二区三区| 久久精品成人| 精品1区2区| 亚洲国产天堂久久国产91| 久久久久久久久久看片| 亚洲毛片在线免费观看| 久久激情视频| 国模私拍一区二区三区| 欧美伊人久久久久久午夜久久久久 | 亚洲欧美国产精品专区久久| 久久精品一区二区国产| 欧美手机在线视频| 国产精品视频yy9099| 一区二区日韩欧美| 国产精品v日韩精品v欧美精品网站| 一本色道久久综合一区| 国产精品久久久久三级| 欧美自拍偷拍| 又紧又大又爽精品一区二区| 最近中文字幕日韩精品| 欧美日韩一区高清| 国产精品中文在线| 久久久久免费视频| 日韩午夜免费| 国产亚洲一级| 国产精品色在线| 欧美高清在线视频| 欧美一级专区免费大片| 亚洲少妇一区| 激情文学一区| 国产精品综合色区在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 国内精品久久久久久 | 欧美激情一区二区| 亚洲免费一在线| 亚洲国产综合在线看不卡| 久久久国产一区二区| 亚洲精品国产精品国产自| 国产精品综合网站| 国产精品一区毛片| 国产精品户外野外| 国产精品嫩草99av在线| 欧美精品一区二区三区久久久竹菊 | 欧美成人在线影院| 中文在线一区| 亚洲午夜精品一区二区三区他趣| 亚洲国产婷婷香蕉久久久久久99 | 国产午夜精品一区理论片飘花 | 韩国精品一区二区三区| 国产精品毛片大码女人| 欧美三级韩国三级日本三斤| 欧美日韩精品一区视频| 国产精品va在线播放| 国产精品实拍| 亚洲第一网站| 欧美福利在线| 久久视频这里只有精品| 国产精品久久久久秋霞鲁丝 | 国产欧美精品一区二区色综合 | 榴莲视频成人在线观看| 久久久av水蜜桃| 欧美国产日本韩| 国产精品久久久一区麻豆最新章节 | 欧美韩日一区| 在线看无码的免费网站| 在线观看欧美日韩| 一区二区成人精品 | 亚洲在线观看视频| 欧美制服丝袜第一页| 麻豆av一区二区三区久久| 欧美日韩精品系列| 黑人巨大精品欧美一区二区| 最新高清无码专区| 国产精品永久免费| 制服诱惑一区二区| 海角社区69精品视频| 精品99一区二区| 午夜一区在线| 国产精品日韩精品| 日韩亚洲视频| 欧美日韩视频在线一区二区| 精品二区视频| 久久久久久久综合日本| 国产精品久久久久秋霞鲁丝 | 午夜亚洲性色福利视频| 欧美视频一区二区三区…| 久久久亚洲人| 国产日韩av高清| 久久国产一区| 亚洲第一色中文字幕| 美女日韩在线中文字幕| 亚洲欧洲在线看| 欧美韩国日本一区| 一本久道久久综合婷婷鲸鱼| 欧美高清不卡| 久久成人资源| 亚洲国产综合在线| 国产综合自拍| 国产精品成av人在线视午夜片| 国内外成人免费激情在线视频网站| 亚洲一二三区在线| 国内激情久久| 欧美日韩亚洲不卡| 性欧美办公室18xxxxhd| 激情自拍一区| 国产一区二区成人| 欧美成人免费在线观看| 欧美在线资源| 久久综合五月| 久久久久久久综合狠狠综合| 一区二区国产日产| 亚洲伦理在线免费看| 翔田千里一区二区| 亚洲精品1区2区| 国内精品视频一区| 国产精品国产三级国产a| 久久最新视频| 欧美一区2区视频在线观看| 亚洲最新合集| 在线观看亚洲视频啊啊啊啊| 国产伦精品一区二区三区四区免费| 欧美成人首页| 免费成人网www| 亚洲国产美女| 免费久久99精品国产自| 国产精品乱码一区二区三区| 国内精品久久久久国产盗摄免费观看完整版 | 欧美精品videossex性护士| 亚洲欧美国内爽妇网| 999亚洲国产精| 亚洲精品一级| 在线播放日韩专区| 国产综合色产| 国产精品一二三| 在线一区亚洲| 欧美日韩精品一区二区在线播放| 亚洲级视频在线观看免费1级| 午夜视频在线观看一区| 狠狠色丁香婷婷综合久久片| 国产精品久久久久久久久久直播| 欧美日韩网站| 国产精品一区二区三区免费观看| 国产精品久久久久婷婷| 激情视频一区二区| 一二三区精品福利视频| 亚洲精品一区二区三区樱花| 亚洲电影免费在线| av成人免费在线| 在线观看一区视频| 欧美成人免费在线观看| 亚洲人屁股眼子交8| 国产精品久久久久77777| 亚洲一区二区视频在线观看| 在线观看欧美视频| 亚洲另类春色国产| 欧美一区二区高清在线观看| 欧美日韩高清在线播放| 黄页网站一区| 久久精品亚洲一区二区三区浴池| 免费h精品视频在线播放| 欧美刺激午夜性久久久久久久| 国产精品日韩欧美大师| 亚洲国产精品一区二区第一页 | 亚洲国产精品视频| 国产精品私人影院| 国产精品v亚洲精品v日韩精品| 久久aⅴ国产紧身牛仔裤| 欧美精品123区| 91久久香蕉国产日韩欧美9色| 亚欧成人精品| 国产亚洲日本欧美韩国| 欧美亚洲系列| 国产一区二区三区久久 | 久久亚洲精品一区| 国色天香一区二区| 最新日韩在线视频| 久热国产精品视频| 亚洲日韩第九十九页| 欧美精品综合|