摘要:工廠模式單例模式結(jié)構(gòu)型設(shè)計(jì)模式關(guān)注于如何將類或?qū)ο蠼M合成更大更復(fù)雜的結(jié)構(gòu),以簡化設(shè)計(jì)。
一、寫在前面
設(shè)計(jì)模式的定義:在面向?qū)ο筌浖O(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案
當(dāng)然我們可以用一個通俗的說法:設(shè)計(jì)模式是解決某個特定場景下對某種問題的解決方案。因此,當(dāng)我們遇到合適的場景時,我們可能會條件反射一樣自然而然想到符合這種場景的設(shè)計(jì)模式。
比如,當(dāng)系統(tǒng)中某個接口的結(jié)構(gòu)已經(jīng)無法滿足我們現(xiàn)在的業(yè)務(wù)需求,但又不能改動這個接口,因?yàn)榭赡茉瓉淼南到y(tǒng)很多功能都依賴于這個接口,改動接口會牽扯到太多文件。因此應(yīng)對這種場景,我們可以很快地想到可以用適配器模式來解決這個問題。
以上參考自網(wǎng)易考拉前端團(tuán)隊(duì)-JavaScript設(shè)計(jì)模式
二、設(shè)計(jì)原則設(shè)計(jì)哲學(xué)準(zhǔn)則:
小即是美
讓每個程序只做好一件事
快速建立原型
舍棄高效率而取可移植性
采用純文本來存儲數(shù)據(jù)
充分利用軟件的杠桿效應(yīng)(可復(fù)用)
使用shell腳本來提高杠桿效應(yīng)和可移植性
避免強(qiáng)制性的用戶界面
每個程序都稱為過濾器
小準(zhǔn)則:
允許用戶定制環(huán)境
盡量使操作系統(tǒng)內(nèi)核小而輕量化
使用小寫字母且簡寫 list = ls
沉默是金
各部分之和大于整體
尋求90%的解決方案
三、SOLID設(shè)計(jì)原則
S 單一職責(zé)原則 single
一個程序只做好一件事情
如果功能復(fù)雜就拆分開,每個部分保持獨(dú)立
O 開放封閉原則 open
對擴(kuò)展開放,對修改封閉
增加需求時,擴(kuò)展新需求,而非修改已有代碼
這是軟件設(shè)計(jì)的終極目標(biāo)
L 李氏置換原則
子類能覆蓋父類
父類能出現(xiàn)的地方子類就能出現(xiàn)
JS使用較少
I 接口獨(dú)立原則
保持接口獨(dú)立,避免出現(xiàn)“胖接口”
JS中沒有接口(ts)
D 依賴導(dǎo)致原則
面向接口編程,依賴于抽象而不依賴于具體
使用方只關(guān)心接口而不關(guān)心具體類的實(shí)現(xiàn)
JS使用較少
四、23種設(shè)計(jì)模式創(chuàng)建型設(shè)計(jì)模式
是一類處理對象創(chuàng)建的設(shè)計(jì)模式,通過某種方式控制對象的創(chuàng)建來避免基本對象創(chuàng)建時可能導(dǎo)致設(shè)計(jì)上的問題或增加設(shè)計(jì)上的復(fù)雜度。工廠模式、單例模式
結(jié)構(gòu)型設(shè)計(jì)模式
關(guān)注于如何將類或?qū)ο蠼M合成更大、更復(fù)雜的結(jié)構(gòu),以簡化設(shè)計(jì)。適配器模式、裝飾器模式、代理模式、外觀模式
行為型設(shè)計(jì)模式
用于不同對象之間職責(zé)劃分或者算法抽象,行為型設(shè)計(jì)模式不僅僅涉及類和對象,還涉及類或?qū)ο笾g的交流模式并加以實(shí)現(xiàn)。觀察者模式、迭代器模式、狀態(tài)模式
UML(Unified Modeling Language)是一種統(tǒng)一建模語言,為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進(jìn)行說明、可視化、和編制文檔的一種標(biāo)準(zhǔn)語言。5.1 類圖的表示
類圖分三層,第一層顯示類的名稱,如果是抽象類,則就用斜體顯示。第二層是類的特性,通常就是字段和屬性。第三層是類的操作,通常是方法或行為。前面的符號,+ 表示public,- 表示private,# 表示protected(js中為嚴(yán)格區(qū)分,ts中有)
那么如何根據(jù)類圖寫出相應(yīng)的代碼結(jié)構(gòu)呢?如下:
注:默認(rèn)不添加屬性或方法類型,即為 public,因此 public 可省略
5.2 類關(guān)系表示泛化關(guān)系【繼承】
空心箭頭表示,是一種繼承關(guān)系。例如:自行車是車
聚合關(guān)系
空心菱形箭頭表示,是整體與部分的關(guān)系,與組合關(guān)系不同,整體和部分不是強(qiáng)依賴的。例如,部門撤銷了,人員不會消失,他們依然存在
組合關(guān)系
實(shí)心菱形箭頭表示,是整體與部分的關(guān)系,但部分不能離開整體而多帶帶存在。如公司和部門是整體和部分的關(guān)系,沒有公司就不存在部門
關(guān)聯(lián)關(guān)系【引用】
實(shí)線(可帶單/雙箭頭)表示,是一種擁有的關(guān)系,它使一個類知道另一個類的屬性和方法
除了上述類關(guān)系外,還有實(shí)現(xiàn)關(guān)系,依賴關(guān)系等表示法,可參考下面博文:
看懂UML類圖和時序圖
UML 各種圖總結(jié)精華
1 根據(jù)下面的信息畫UML類圖
打車時,可以打快車或者專車。任何車都有車牌號和名稱
不同車打車價格不同,快車1元/公里,專車2元/公里
行程開始時顯示車輛信息
行程結(jié)束時顯示打車金額
2 根據(jù)下面的信息畫UML類圖
某停車場,分三層,每層100車位
每個車位都能監(jiān)控到車輛的駛?cè)牒碗x開
車輛駛?cè)肭埃@示每層空余車位數(shù)量
車輛駛?cè)霑r,攝像頭可識別車牌號和時間
車輛出來時,出口顯示器顯示車牌號和停車時間
分析:
車是一個大類,快車和專車?yán)^承自車
行程是一個多帶帶的類,連接用車和開始結(jié)束兩個動作
分析:
關(guān)系1:車位組成層,層組成車庫。組合關(guān)系
關(guān)系2:攝像機(jī)和顯示屏是車庫的部分,且能多帶帶存在。聚合關(guān)系
車停入車位時,需要判別該車位狀態(tài)(是否為空車位)
車庫需要記錄車駛?cè)腭偝龅臓顟B(tài)和記錄車位數(shù),需要通過層獲取
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/109937.html
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時候,會進(jìn)行總結(jié)或者分享會議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時候,會進(jìn)行總結(jié)或者分享會議!那么今天我就...
摘要:核心功能就是啟動一個服務(wù)并監(jiān)聽項(xiàng)目文件改變,文件改變后再刷新服務(wù)器。 Karma 簡介 Karma是Testacular的新名字,在2012年google開源了Testacular,2013年Testacular改名為Karma。Karma是一個讓人感到非常神秘的名字,表示佛教中的緣分,因果報(bào)應(yīng),比Cassandra這種名字更讓人猜不透! Karma是一個基于Node.js的JavaS...
摘要:總想找個機(jī)會夯實(shí)一下自己的基礎(chǔ),正好最近略有清閑,看視頻讀書擼代碼我選擇了第三者怎么感覺有點(diǎn)別扭,看視頻的話效率不高適合入門,看書的話一本你不知道的推薦給大家,選擇繼續(xù)看書的話還是算了吧,畢竟讀萬卷書不如行萬里路是吧。 總想找個機(jī)會夯實(shí)一下自己的JS基礎(chǔ),正好最近略有清閑,看視頻?讀書?擼代碼?我選擇了第三者(怎么感覺有點(diǎn)別扭),看視頻的話效率不高適合入門,看書的話,一本《你不知道的J...
摘要:的介紹一般是這樣在中,類是隨內(nèi)核一起發(fā)布的核心庫。庫為帶來了一種存儲原始數(shù)據(jù)的方法,可以讓處理二進(jìn)制數(shù)據(jù),每當(dāng)需要在中處理操作中移動的數(shù)據(jù)時,就有可能使用庫。這樣傳遞數(shù)據(jù)會更快。 零、開始之前 1、 首先解釋一下node.js是什么? 2、node.js和javascript有什么不同? 1)因?yàn)閖avascript主要是用在browser,而node.js是在server或者你的電腦...
閱讀 2244·2021-11-02 14:48
閱讀 2889·2019-08-30 14:19
閱讀 3067·2019-08-30 13:19
閱讀 1430·2019-08-29 16:17
閱讀 3428·2019-08-26 14:05
閱讀 3118·2019-08-26 13:58
閱讀 3198·2019-08-23 18:10
閱讀 1237·2019-08-23 18:04