设计原则笔记
來西安快2個(gè)星期了,帶領(lǐng)學(xué)員們一起學(xué)習(xí)Flex,當(dāng)然之前要學(xué)習(xí)HTML、CSS、JavaScript、XML等相關(guān)前端基礎(chǔ)知識(shí),自己也收獲不少。一方面鍛煉了自己的技術(shù)能力,同時(shí)也提升了項(xiàng)目管理、和人溝通的能力。之前在學(xué)習(xí)也接觸過一些設(shè)計(jì)原則,有點(diǎn)印象,可能是當(dāng)時(shí)的代碼量不多,所以體會(huì)不深。現(xiàn)在應(yīng)該有些理解了。
我們做計(jì)算機(jī)或者軟件開發(fā)的,肯定和代碼和文檔打交道的多,有時(shí)我們的工作就是這2樣了,當(dāng)然有時(shí)也會(huì)開會(huì)討論。但是在IT行業(yè),思想決定了您未來的發(fā)展方向和晉升的職務(wù)。當(dāng)然,我們的代碼量最好是10K以上,要不然我們無法體會(huì)設(shè)計(jì)原則的思想和精華。
首先,就是設(shè)計(jì)的基本原則:
1.封裝變化(Encapsulate what varies)
2.面向接口編程而非實(shí)現(xiàn)(Code to an interface than to an implementation)
3.優(yōu)先使用組合而非繼承(Favor compositon over Inheritance)
第一點(diǎn)和第二點(diǎn)相對(duì)好理解,但是第三點(diǎn)有點(diǎn)轉(zhuǎn)不過彎來,后來上網(wǎng)查了一下,如果過多的使用,代碼的耦合度較大,后期不好維護(hù)。前輩的理解:因?yàn)槲覀冃枰w現(xiàn)事物在抽象層面上的共通性,這時(shí)候接口就出現(xiàn)了,我們通常更關(guān)注can-do而不是is-a(當(dāng)然不排除很多時(shí)候我們關(guān)注后者),組合可以幫助我們做到一個(gè)事物得到多個(gè)事物的功能(真?zhèn)?#xff09;,而不是財(cái)產(chǎn)(遺傳基因),所以我們可以通過組合來實(shí)現(xiàn)接口,以接口繼承的形式來實(shí)現(xiàn)一種關(guān)注can-do的多繼承。
相比繼承,接口實(shí)現(xiàn)更加靈活,組合更加具有可變化性,并且不會(huì)讓繼承樹太過復(fù)雜,造成類庫(kù)的難以控制。
另外我還參考了://blog.csdn.net/Cpp_Java_Man/archive/2006/05/02/705279.aspx,這邊博文對(duì)組合和繼承講解比較通俗易懂。我們?yōu)槭裁床挥美^承?繼承破壞了類的封裝性,增加了類與類之間的耦合度,雖然繼承是面向?qū)ο笕筇卣髦?#xff0c;我們還是要轉(zhuǎn)變一下觀念。當(dāng)然最初學(xué)面向?qū)ο笤O(shè)計(jì)時(shí),我們還是有必要使用繼承。
然后就是5大原則了:
1.單一原則:一個(gè)類只完成一系列相同的事情,當(dāng)然不是說一個(gè)類就一個(gè)方法。要不然我們修改一處,其他的地方都要修改,為維護(hù)性差
2.開放-封閉原則:擴(kuò)展是開放的,更改是封閉的
3.里氏替換原則:子類必須能夠替換它們的基類。經(jīng)典的例子就是:企鵝類和鳥類,企鵝是鳥,但是不能飛,所以我們?cè)O(shè)計(jì)這2個(gè)類就要注意了。不是簡(jiǎn)單的繼承關(guān)系了
4.依賴倒置:高層模塊不依賴底層,二者都依賴于抽象;抽象不依賴于細(xì)節(jié),細(xì)節(jié)依賴于抽象,現(xiàn)在還是有些模糊;
5.接口分離原則,這個(gè)相對(duì)好理解,一個(gè)接口就完成一個(gè)功能,不要擔(dān)任過多的功能。
IT行業(yè),所要求的還是大家的興趣,以及學(xué)習(xí)新技術(shù)能力。當(dāng)然對(duì)于畢業(yè)生來說,實(shí)踐(代碼量的多少)和理論(專業(yè)基礎(chǔ))是無法替代的。
總結(jié)
- 上一篇: javascript天然的迭代器
- 下一篇: 如何添加sersync进程监控脚本