<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
橋接設計模式是一種偏向於組合的設計模式,而非繼承的設計模式,實現的細節從一個模組推播給另一個具有單獨模組的物件
橋接設計模式在開發中常用於事件監控,還有陣列的一些方法都能夠體現出來橋接設計模式的思想,例如陣列方法的forEach方法
有一個很多頁面的網站,我們預期是讓使用者可以選擇修改網站的主體,如果給每個頁面都建立一個主題頁面的副本,這樣做會很麻煩,這個時候我們就可以使用橋接設計模式進行實現,進行控制網站的主題顏色,通過建立單獨的主題根據使用者的選擇進行載入,接下來我們來實現一下
先宣告倆個主題模組類,一個是外觀主題,一個是內容主題,裡面擁有一個方法,該方法可以進行設定主題顏色
// 外觀主題 class Large { constructor(theme) { // 主題顏色 this.theme = theme; } // 設定主題顏色 setThemeColor() { console.log("Large主題顏色設定為" + this.theme.getColor()); } } // 內容主題 class Small { constructor(theme) { // 主題顏色 this.theme = theme; } // 設定主題顏色 setThemeColor() { console.log("Small主題顏色設定為" + this.theme.getColor()); } }
在宣告幾個主題顏色類,類裡面有一個方法可以獲取當前主題顏色
class RedTheme { getColor() { return "red"; } } class BlueTheme { getColor() { return "blue"; } } class YellowTheme { getColor() { return "yellow"; } }
我們進行建立主題模組類,在把主題顏色類傳遞過去呼叫主題模組設定主題顏色的方法
// 建立主題顏色 const RedTheme = new RedTheme(); const BlueTheme = new BlueTheme(); const YellowTheme = new YellowTheme(); // 主題模組 const Large = new Large(RedTheme); const Small = new Small(BlueTheme); // 設定外觀主題和內容主題 Large.setThemeColor() Small.setThemeColor()
橋接設計模式的優勢在於就算其中某一模組發生變化,也不會影響其他模組的使用,降低了程式碼的耦合度,同時因橋接設計模式要求兩個模組之間沒有耦合關係,否則無法完成獨立的變化,所以也是比繼承方案更好的解決方案,提高了程式碼的可延伸性,但是因此橋接設計模式也提高了整體程式碼的複雜程度
中介者設計模式是指通過一箇中介者物件封裝一系列的物件互動,中介者物件可以讓每個物件不需要顯式地相互參照,從降低耦合度,當其中一個物件發生改變時,只需要通知中介者物件即可
在生活中我們也經常使用到中介者設計模式,例如,醫院的120急救中心排程站,當我們打電話給120急救中心時,急救中心120排程員接到電話會指派最近的急救車輛去我們身邊,急救車輛只需要和急救中心排程臺通訊就能確定路線和需要救援人員位置,而不需要和所有的急救車輛通訊,同時急救中心排程臺作為中介者,知道每個車輛的位置與行駛路線,所以可以安排所有急救車輛的路線和調配
我們來照著急救中心排程站的例子來實現一下
建立一個急救中心排程站,裡面有倆個屬性代表救護車編號和需要急救的病人,還有倆個方法給急救車分配任務,以及詢問當前急救車輛是否有急救任務
class FirstAid { constructor(identifier) { // 救護車編號 this.identifier = identifier; // 需要救得病人 this.patient = null; } // 新增病人 setPatient(patient) { this.patient = patient; } // 是否已有急救任務 receivePatient() { // 通過是否分配病人進行判斷 if (this.patient) { console.log(this.identifier + '已接收病人'); } else { console.log(this.identifier + '未接收病人,可接收急救任務'); } } }
建立急救車範例,並進行分派任務
// 建立急救車 let first1 = new FirstAid('急救車1'); let first2 = new FirstAid('急救車2'); //分派急救任務 first1.setPatient('小孩'); //詢問是否可接收急救任務 first1.receivePatient(); first2.receivePatient();
中介者設計模式在我們書寫業務中也經常會用到,比如電商網站做的購物車需求,該需求中有存在商品選擇表單,顏色選擇表單 ,購買數量表單等等,都會觸發change事件,這個時候我們就可以通過中介者進行轉發處理這些事件,實現每個事件的解耦,我們只需要維護中介者物件即可
redux和vuex都屬於中介者設計模式的實際應用,我們把共用的資料抽離成一個store,每個都通過store這個中介者來進行操作
中介者設計模式通過讓物件之間的關聯性變低降低了程式碼耦合度提高了可複用性,通過將控制邏輯集中,提高程式碼可維護性,但是中介者在其中承擔了較多的責任,一旦中介者出現問題,整個系統就都會受到影響
到此這篇關於JavaScript設計模式中的橋接和中介者模式的文章就介紹到這了,更多相關JavaScript設計模式 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45