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