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

資訊專(zhuān)欄INFORMATION COLUMN

[設(shè)計(jì)模式][組合模式][Javascript]

hersion / 2912人閱讀

摘要:簡(jiǎn)化了父和子之間的關(guān)系。對(duì)于子節(jié)點(diǎn)來(lái)說(shuō)也是一樣的,過(guò)多的接口暴露有時(shí)候也是一種濫用,同時(shí)也減少了對(duì)外部的依賴(lài)。

  

The Composite Pattern is a partitioning design pattern. The composite pattern describes that a group of objects is to be treated in the same way as a single instance of object. The intent of a composite is to "compose" objects into tree structures to represent part-whole hierarchies. Implementing the composite pattern lets client treat individual objects and compositions uniformly.
From http://en.wikipedia.org/wiki/Composite_pattern

定義

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

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

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

需求

按鈕組需求:

有這樣一組按鈕,他們橫向的進(jìn)行排列,根據(jù)當(dāng)前用戶權(quán)限設(shè)置有哪些按鈕被顯示

按鈕可以分成subgroup,按特定的功能進(jìn)行劃分subgroup

類(lèi)圖

角色

AbstractButton (Component) 定義一組公共的接口

Button (Leaf) 表示葉子節(jié)點(diǎn)的對(duì)象,葉子節(jié)點(diǎn)沒(méi)有自己的子節(jié)點(diǎn)

ButtonGroup (Composite) 定義有枝節(jié)點(diǎn)行為,用來(lái)存儲(chǔ)子部件,在Component接口中實(shí)現(xiàn)與子部件有關(guān)操作

實(shí)現(xiàn)
var prototype = require("prototype");

var AbstractButton = prototype.Class.create({
  render: function() {
    throw new Error("method must be override!");
  }
});

var Button = prototype.Class.create(AbstractButton, {
  initialize: function(id, group) {
    this.id = id;
    this.group = group;
  },

  render: function () {
    console.log("render: Button的ID是:"+this.id+", group是:"+this.group);
  }
});

var ButtonGroup = prototype.Class.create(AbstractButton, {
  initialize: function () {
    this.buttons = [];
  },

  add: function (btn) {
    if (btn instanceof Button) {
      this.buttons.push(btn);
    }
  },

  remove: function (id) {
    for (var i = this.buttons.length - 1; i >= 0; i--) {
      if(this.buttons[i].id === id){
        this.buttons.splice(i, 1);
      }
    }
  },

  getChild: function (id) {
    var search = [];
    for (var i = this.buttons.length - 1; i >= 0; i--) {
      if(this.buttons[i].id === id){
        search.push(this.buttons[i]);
      }
    }

    return search;
  },

  render: function () {
    for (var i = this.buttons.length - 1; i >= 0; i--) {
      this.buttons[i].render();
    }
  }
});

var Main = function () {

  var editBtn = new Button("editbtn", "edit");
  var deleteBtn = new Button("deletebtn", "edit");
  var manageBtn = new Button("managebtn", "edit");

  var btngroup = new ButtonGroup();
  btngroup.add(editBtn);
  btngroup.add(deleteBtn);
  btngroup.add(manageBtn);


  btngroup.render();
}

Main();

注:繼承采用了PrototypeJS提供的Class來(lái)做的,使用了Prototype.Node,關(guān)于prototype如何使用參考Prototype Doc

參考

http://en.wikipedia.org/wiki/Composite_pattern

http://www.cnblogs.com/peida/archive/2008/09/09/1284686.html

http://sourcemaking.com/design_patterns/composite

http://baike.baidu.com/view/3591789.htm?fr=aladdin

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

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

相關(guān)文章

  • 聽(tīng)飛狐聊JavaScript設(shè)計(jì)模式系列12

    摘要:,對(duì)組合對(duì)象執(zhí)行的操作可以向下傳遞到葉子節(jié)點(diǎn)進(jìn)行操作。組合模式之圖片庫(kù)圖片庫(kù)可以有選擇地隱藏或顯示圖片庫(kù)的全部或某一部分單獨(dú)的或是部分的。 本回內(nèi)容介紹 上一回,聊了橋接模式,做了一道計(jì)算題;介一回,聊組合模式(Composite),官方描述組合模式將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 組合模式特性 這里我理了一下,就組...

    HitenDev 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式-第一部分:?jiǎn)卫?em>模式、組合模式和外觀模式

    摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱(chēng)為模塊設(shè)計(jì)模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對(duì)象文字費(fèi)賠給變量。 JavaScript設(shè)計(jì)模式-第一部分:?jiǎn)卫J健⒔M合模式和外觀模式 設(shè)計(jì)模式是一些可靠的編程方式,有助于保證代碼更加易于維護(hù)、擴(kuò)展及分離,所有設(shè)計(jì)模式在創(chuàng)建大型JavaScript應(yīng)用程序時(shí)均不可或缺 單...

    betacat 評(píng)論0 收藏0
  • js設(shè)計(jì)模式--組合模式

    摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式設(shè)計(jì)模式迭代器模式設(shè)計(jì)模式發(fā)布訂閱模式設(shè)計(jì)模式命令模式概念組合模式就是用小的子對(duì)象來(lái)構(gòu)建更大的對(duì)象,而這些小的子對(duì)象本身也許是由更小的孫對(duì)象構(gòu)成的。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略...

    blankyao 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式(八):組合模式

    摘要:不同于其它靜態(tài)編程語(yǔ)言,實(shí)現(xiàn)組合模式的難點(diǎn)是保持樹(shù)對(duì)象與葉對(duì)象之間接口保持統(tǒng)一,可借助定制接口規(guī)范,實(shí)現(xiàn)類(lèi)型約束。誤區(qū)規(guī)避組合不是繼承,樹(shù)葉對(duì)象并不是父子對(duì)象組合模式的樹(shù)型結(jié)構(gòu)是一種聚合的關(guān)系,而不是。 showImg(https://segmentfault.com/img/bVbu79V?w=800&h=600); 組合模式:又叫 部分整體 模式,將對(duì)象組合成樹(shù)形結(jié)構(gòu),以表示 部分...

    leon 評(píng)論0 收藏0
  • javascript 組合模式

    摘要:開(kāi)始掃描文件夾文件下不能添加其他文件夾或文件開(kāi)始掃描文件根文件加技術(shù)棧權(quán)威小王子 組合模式 **// 組合模式在對(duì)象間形成樹(shù)形結(jié)構(gòu)// 組合模式中基本對(duì)象和組合對(duì)象被一致對(duì)待// 無(wú)須關(guān)心對(duì)象有多少層 調(diào)用時(shí)只需要在根部進(jìn)行調(diào)用**結(jié)合了命令模式和組合模式的具體實(shí)現(xiàn): const MacroCommand = function () { return { ...

    Carson 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式之結(jié)構(gòu)型設(shè)計(jì)模式

    摘要:享元模式通過(guò)分析應(yīng)用程序的對(duì)象,將其解析為內(nèi)在數(shù)據(jù)和外在數(shù)據(jù),減少對(duì)象數(shù)量,從而提高程序的性能。通過(guò)這種方式進(jìn)行事件綁定,可以減少事件處理程序的數(shù)量,這種方式叫做事件委托,也是運(yùn)用了享元模式的原理。事件處理程序是公用的內(nèi)在部分,每個(gè)菜單項(xiàng)各 github 全文地址 : YOU-SHOULD-KNOW-JS JavaScript設(shè)計(jì)模式之外觀模式 概念 外觀模式:為一組復(fù)雜子系統(tǒng)接口提...

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

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

0條評(píng)論

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