天天看點

面向對象,設計模式進一步了解

設計模式,是前人總結的經驗,在不同的場景裡解決不同的問題,是以不應該“簡單”的複制,不應該為了模式而模式,應該是靈活應用的。

看了網上很多講設計模式的,還有不少書籍也有,開始看的時候看不懂,再學了面向對象之後,發現那些例子(貓啊狗啊)什麼的都可以看懂,但是,在具體的項目裡面并不知道怎麼去使用。

所有的代碼因項目而異,設計模式的那些套路,不一定适合你。之是以看不懂,是因為記那些概念太多了,還有就是代碼量不夠,我們常講的“量變”->“質變”,沒有一定的代碼量,是了解不了那些設計模式的。

跳出概念的限制

我們來看一段代碼:

面向對象,設計模式進一步了解

TEntity類中,沒有CreationTime這個字段,但是他的父類IHasCreationTime中有,當時不了解的是,為什麼轉換成了父類,改變了屬性CreationTime的值,model執行個體的值也就改變了呢?

設計模式講“裡氏替換原則”,講了一大堆企鵝、鳥的一些概念,并沒有講到本質上,你發現你知道了書上講的企鵝和鳥的關系,結果到代碼了解還是比較模糊。

這裡是應用了多态,傳統的23中設計模式中,大部分都是以面向對象“多态”的特征來實作的,如果不懂多态,就不要學設計模式,體會不到好處。

上面代碼中,為什麼子類轉換到父類,改變了“父類”的值,子類也改變了?

原因:子類到父類的轉換,子類不管怎麼轉,他的執行個體不變,轉到父類隻是決定用什麼(父類的)形式去通路罷了。而他實際的記憶體存儲位址是不變的。 

多态:父類可以指向子類,父類可以接受子類,就這麼簡單。

面向對象三大特性:封裝、繼承、多态。

面向對象五大原則:單一職責、開閉原則、依賴倒置原則、裡氏替換原則、接口隔離原則。

使用原則:優先使用組合,少用繼承(孩子太多會坑爹)。

使用設計模式達到最好的效果就是:高内聚(子產品内)、低耦合(子產品間)

最好的設計模式,就是忘了設計模式,不要被條條框框概念限制,随手寫得好代碼,前提是學好内功心法,打好基礎,多寫多練,積累代碼,量變到質變。

繼續閱讀