1,開篇 在剛剛學習完李建中老師的C#面向對象之設計模式縱橫談視頻之後,感想頗多,在此稍微記錄一下嘿嘿。 2,內功修煉 很多人都反映,學了設計模式就感覺好像什麼都沒學到一樣,學了就忘了,學了也不會用,然後還需要再枯燥的再去學。其實我覺得這樣是沒有真正領悟設計模式的精髓,對於修煉武功一樣,只去學一些外 ...
1,開篇
在剛剛學習完李建中老師的C#面向對象之設計模式縱橫談視頻之後,感想頗多,在此稍微記錄一下嘿嘿。
2,內功修煉
很多人都反映,學了設計模式就感覺好像什麼都沒學到一樣,學了就忘了,學了也不會用,然後還需要再枯燥的再去學。其實我覺得這樣是沒有真正領悟設計模式的精髓,對於修煉武功一樣,只去學一些外在的招式,而不加強自己的內功的修煉,因此學來學去,即使招式再牛逼,也起不了太大作用,因為內功不行。內功就是我們常說的,但是卻常常容易被人忽略的東西。
2.1,什麼是面向對象
每個人不妨問問自己的內心,看看自己有沒有真正的理解透徹面向對象,什麼是繼承,什麼是封裝,什麼又是多態等等。自己有沒有從頭認真看過面向對象的書籍,有沒有進行深刻的練習與反思,自己到底有沒有真正的理解面向對象內容。我想當你把這些真正的明白了,真正的熟練的運用到項目中,那麼恭喜你已經完成了內功修煉的第一步!!!
2.2,什麼是抽象-具體
俗話說的話,依賴於抽象,不依賴於具體實現。那麼什麼才算是抽象呢,什麼又是具體的呢?這些自己心中是否有底呢。當我們Coding時,我們有沒有提前設計自己的類圖,設計自己的時序圖,有沒有深刻的分析需求,深刻的理解用戶的需求,這些都是我們要考慮的,只有深刻的理解了需求,才能談的上去抽象,去提煉。比如操作資料庫,我們都必然會設計到增刪改查方法,但是我們不確定最終項目會用什麼樣的資料庫,前期可能用mysql就夠了,但到了後期可能又要該sqlserver,後期還可能mongodb等。那麼在這裡抽象的就是資料庫的增刪改查方法,而具體的就是資料庫的種類。而我們在開發時就要依賴於抽象,而不能依賴於具體的那個資料庫。如果你真正的理解用戶需求,然後又懂得什麼是抽象和具體,以及提取出抽象的東西,那麼恭喜你,你已經學會了內功修煉第二步了!
2.3,什麼是設計原則(我個人簡單定義為S、I、L、O、D)
S(Single),職責單一。就是每個類只負責處理自己相關的東西。每個類只有一個讓它發生改變的原因。
I(Interface),介面隔離。不要要一個介面負責很多事情,不要讓其污染哈哈,每個介面之間都彼此隔離。
L(),里氏替換原則。即子類可以重寫父類。重寫後不會引起使用者的變動。
O(Open),開放封閉原則。對擴展開放,對修改封閉。一個類如果要增加新功能,可以新增加類,但是不要修改原有的類。
D(Dependence),依賴倒置原則。具體依賴於抽象,而不應該是抽象依賴於具體實現。
3,招式
其實設計模式本身就是工具,每每提到設計模式,都說是23種設計模式,其實遠不止這些,只是這23種較為實用而已。設計模式只能作為你真正掌握了以上的內功心法之後的學的一種外在招式,如何體現出來你的內功,如何表達你的內功,則必須通過一定的招式,一定的方法,這裡就是設計模式。
4,總結
總而言之,如果不懂得設計模式的精髓(設計原則),也就是不懂內功,則再學多少遍設計模式,會多少招式,我覺得也難以立足於江湖!!!!