日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

javascript設計模式 ? 組合模式原理與應用實例分析

瀏覽:36日期:2023-11-04 10:20:23

本文實例講述了javascript設計模式 ? 組合模式原理與應用。分享給大家供大家參考,具體如下:

介紹:組合模式又叫部分整體模式,用于把一組相似的對象當作一個單一的對象。組合模式依據樹形結構來組合對象,用來表示部分以及整體層次

定義:組合多個對象形成樹形結構以表示具有整體一部分關系的層次機構。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性,組合模式又可以成為整體一部分模式。它是一種對象結構型模式。

場景:我們對公司的人員架構進行一下打印,假設所有管理崗和開發崗的區別只有一個,是不是有下級員工。我們來實現下:

示例:

var LEADER = function(name,dept){ this._name = name || ’’; //姓名 this._dept = dept || ’’; //職位 this._subordinates = []; //下屬 this.add = function(employee){ this._subordinates.push(employee); } this.remove = function(employee){ this._subordinates.splice(this._subordinates.indexOf(employee),1); } this.getSubordinates = function(){ return this._subordinates; } this.toString = function(){ console.log(’姓名:’+this._name+’,職位:’+this._dept) }}var JAVARD = function(name,dept){ this._name = name || ’’; //姓名 this._dept = dept || ’’; //職位 this.toString = function(){ console.log(’姓名:’+this._name+’,職位:’+this._dept) }} var FERD = function(name,dept){ this._name = name || ’’; //姓名 this._dept = dept || ’’; //職位 this.toString = function(){ console.log(’姓名:’+this._name+’,職位:’+this._dept) }} function addData(){ var CEO = new LEADER(’spancer’,’CEO’); var CTO = new LEADER(’zijian’,’CTO’); var MANAGER = new LEADER(’jiang’,’LEADER’); var JAVA_LEADER = new LEADER(’fei’,’JAVA_LEADER’); var FE_LEADER = new LEADER(’risker’,’FE_LEADER’); var wh = new FERD(’wanghui’,’FE’); var si = new FERD(’si’,’FE’); var amy = new FERD(’amy’,’FE’); var wei = new JAVARD(’wei’,’JAVA’); var guo = new JAVARD(’guo’,’JAVA’); var yuan = new JAVARD(’yuan’,’JAVA’); CEO.add(CTO); CTO.add(MANAGER); MANAGER.add(JAVA_LEADER); MANAGER.add(FE_LEADER); FE_LEADER.add(wh); FE_LEADER.add(si); FE_LEADER.add(amy); JAVA_LEADER.add(wei); JAVA_LEADER.add(guo); JAVA_LEADER.add(yuan); return CEO;}var eachEmployee = function(employee){ for(var employ of employee.getSubordinates()){ employ.toString(); if(employ.getSubordinates && employ.getSubordinates().length > 0){ eachEmployee(employ); } }} var CEO = addData();CEO.toString();eachEmployee(CEO);// 姓名:spancer,職位:CEO// 姓名:zijian,職位:CTO// 姓名:jiang,職位:LEADER// 姓名:fei,職位:JAVA_LEADER// 姓名:wei,職位:JAVA// 姓名:guo,職位:JAVA// 姓名:yuan,職位:JAVA// 姓名:risker,職位:FE_LEADER// 姓名:wanghui,職位:FE// 姓名:si,職位:FE// 姓名:amy,職位:FE

這里我們簡單寫的這個demo,用來對公司組織架構進行遍歷輸出。因為rd和leader具體職能的不同,我們把技術和管理分為兩大類。但是這樣的設計存在很多問題:

* 可擴展性差,當一個新的職位產生,在對其歸類時是新增一個還是放到已有類目下面都是一個問題。* 當某一行為發生變化需要挨個修改leader類rd類,不符合開關原則。

接下來我們用組合模式實現下:

var Employee = function(name, dept){ this._name = name || ’’; //姓名 this._dept = dept || ’’; //職位 this._subordinates = []; //下屬 this.add = function(employee){ this._subordinates.push(employee); } this.remove = function(employee){ this._subordinates.splice(this._subordinates.indexOf(employee),1); } this.getSubordinates = function(){ return this._subordinates; } this.toString = function(){ console.log(’姓名:’+this._name+’,職位:’+this._dept) }} function addData(){ var CEO = new Employee(’spancer’,’CEO’); var CTO = new Employee(’zijian’,’CTO’); var LEADER = new Employee(’jiang’,’LEADER’); var JAVA_LEADER = new Employee(’fei’,’JAVA_LEADER’); var FE_LEADER = new Employee(’risker’,’FE_LEADER’); var wh = new Employee(’wanghui’,’FE’); var si = new Employee(’si’,’FE’); var amy = new Employee(’amy’,’FE’); var wei = new Employee(’wei’,’JAVA’); var guo = new Employee(’guo’,’JAVA’); var yuan = new Employee(’yuan’,’JAVA’); CEO.add(CTO); CTO.add(LEADER); LEADER.add(JAVA_LEADER); LEADER.add(FE_LEADER); FE_LEADER.add(wh); FE_LEADER.add(si); FE_LEADER.add(amy); JAVA_LEADER.add(wei); JAVA_LEADER.add(guo); JAVA_LEADER.add(yuan); return CEO;}var eachEmployee = function(employee){ for(var employ of employee.getSubordinates()){ employ.toString(); if(employ.getSubordinates().length > 0){ eachEmployee(employ); } }} var CEO = addData();CEO.toString();eachEmployee(CEO);// 姓名:spancer,職位:CEO// 姓名:zijian,職位:CTO// 姓名:jiang,職位:LEADER// 姓名:fei,職位:JAVA_LEADER// 姓名:wei,職位:JAVA// 姓名:guo,職位:JAVA// 姓名:yuan,職位:JAVA// 姓名:risker,職位:FE_LEADER// 姓名:wanghui,職位:FE// 姓名:si,職位:FE// 姓名:amy,職位:FE

大家可以對比下兩段代碼的差異,我們用一個Employee類來替換leader和rd類,其實這就是組合模式的關鍵:

定義一個抽象類,它既可以代表leader也可以代表rd,添加、打印時也基于Employee類,而無需知道這個人是什么角色。可以對其進行統一處理。

組合模式總結:

優點:* 可以清楚的定義存在層次關系的復雜對象,讓客戶端開發過程中忽略層次的差異* 全局修改時,只需修改一處位置

缺點:* 無法對生成結果進行限制,不能像第一個例子一樣,所有的rd都沒有下級員工屬性,也沒有對應方法。所以在使用時要注意這些約束

適用場景;* 在一個面向對象的語言開發系統中需要處理一個樹形結構。* 在具有整體和部分的結構中,希望忽略掉二者差異,使客戶端一致對待。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆精品91| 亚洲成人免费| 欧美日韩亚洲三区| 婷婷国产精品| 无码日韩精品一区二区免费| 四虎精品永久免费| 久久精品99国产精品日本| 在线观看精品| 美女久久一区| 久久精品国产福利| 丝瓜av网站精品一区二区 | 亚洲午夜国产成人| 日韩专区精品| 亚洲欧美日本日韩| 国产精品日本一区二区三区在线| 国产精品videossex| 亚洲一区亚洲| 国产一区二区三区免费在线| 日韩久久精品| 国产精品国码视频| 亚洲免费影院| 国产a亚洲精品| 亚洲精品中文字幕99999| 91久久在线| 欧美日本久久| 亚洲三级毛片| 国产精品99免费看| 福利精品一区| 日本国产欧美| 不卡一区2区| 视频精品一区| 婷婷色综合网| 国产视频一区三区| 日韩精品视频在线看| 亚洲精品观看| 欧美成a人免费观看久久| 蜜桃av一区二区在线观看| 涩涩av在线| 精品国产三区在线| 日韩国产欧美视频| 美女尤物久久精品| 精品国产网站| 天堂网在线观看国产精品| 久久大逼视频| 一区二区小说| 99精品在线| 色婷婷色综合| 国产精品2023| 亚洲深夜福利| 国产偷自视频区视频一区二区| 99视频精品全国免费| 国产免费av国片精品草莓男男| 六月婷婷一区| 日韩专区一卡二卡| 久久精品九色| 日本色综合中文字幕| 成人亚洲精品| 国产精品欧美三级在线观看| 日韩精品欧美大片| 欧洲av一区二区| 国产福利91精品一区二区| 国产欧美自拍一区| 9国产精品视频| 国产一区二区三区四区二区| 国产精品久一| 久久影视三级福利片| 久久aⅴ国产紧身牛仔裤| 伊人成人在线视频| 久久不射中文字幕| 成人羞羞视频播放网站| 麻豆精品蜜桃| 91九色精品| 成人影视亚洲图片在线| 韩日一区二区| 国产成人精品一区二区三区免费| 欧美综合精品| 久久99青青| 成人在线视频免费看| 亚洲一级网站| 国产高清不卡| 成人免费电影网址| 亚洲一区二区动漫| 在线视频观看日韩| 视频一区欧美日韩| 国产精品一区二区中文字幕| 四虎精品永久免费| 久久在线91| 久久精品在线| 国产在线|日韩| 香蕉视频成人在线观看| 青青草精品视频| 91久久中文| 欧美亚洲tv| 性欧美xxxx免费岛国不卡电影| 日韩精品一区第一页| 欧美黄色一区二区| 欧美专区一区| 成人国产精品一区二区网站| 久久久人人人| 亚洲精品韩国| 9色精品在线| 欧美精品国产白浆久久久久| 久久av免费| 欧美国产亚洲精品| 久久五月天小说| 综合国产精品| 欧美成人久久| 国产毛片精品久久| 久久av国产紧身裤| 日韩视频免费| 国产亚洲毛片在线| 美女在线视频一区| 亚洲福利精品| 欧美一区二区三区高清视频| 五月激激激综合网色播| 精品视频国产| 久久爱www.| 精品久久久久中文字幕小说| 久久在线视频免费观看| 国产精品久久久免费| 欧美国产视频| 亚洲综合不卡| 日本欧美不卡| 国产一区二区三区不卡视频网站 | 亚洲伦乱视频| 香蕉久久久久久久av网站| 成人一区不卡| 亚洲开心激情| 国产精品激情| 午夜日韩av| 91精品一区二区三区综合| 国产日韩欧美在线播放不卡| 1024精品一区二区三区| 桃色av一区二区| 天堂成人国产精品一区| 亚洲丝袜美腿一区| 日韩av电影一区| 女人天堂亚洲aⅴ在线观看| 成人久久久久| 久久99精品久久久久久园产越南| 亚洲少妇在线| 亚洲女同一区| 亚洲国产福利| 99热精品在线| 91在线成人| 日韩精品一级二级| а√在线中文在线新版| 欧美一区二区三区久久| 中文亚洲免费| 水蜜桃久久夜色精品一区| 亚洲美女91| 91精品电影| 人人精品亚洲| 久久99蜜桃| 久久国产免费看| 老鸭窝毛片一区二区三区| 日本不卡一二三区黄网| 久久国产精品久久久久久电车| 国产日韩一区| 欧美日韩国产在线观看网站| 日韩久久精品| 日本午夜精品| 狠狠久久婷婷| 在线视频观看日韩| 91精品啪在线观看国产18| 日韩欧美精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 亚洲高清成人| 欧美国产日本| 欧美在线亚洲| 欧美日韩在线二区| 日韩激情一区| 久久久久欧美精品| 视频一区中文| 在线综合亚洲| 亚洲成av人片一区二区密柚| 成人日韩在线观看| 亚洲国产成人二区| 国产日韩一区二区三区在线| 亚州av一区| 先锋影音国产一区| 国产v日韩v欧美v| 日韩久久精品| 欧美日韩在线网站| 久久精品国产99国产精品| 日韩精品中文字幕一区二区| 久久蜜桃资源一区二区老牛| 久久激情综合网| 国产精一区二区| 日韩avvvv在线播放| 欧美在线91| 欧美中文一区| 久久精品欧洲| 日本一区二区免费高清| 日韩欧美另类中文字幕| 中文字幕一区二区三区四区久久| 天堂成人国产精品一区| 蜜桃久久久久久久| 日韩一区二区三免费高清在线观看| 亚洲精品综合|