學習一樣東西,我們首先要知道為什麼要學這個,或者說這個東西能起到什麼作用。這樣才能更加有目的、有效率地進行學習。 然後再問為什麼這個東西能實現這樣的效果,從而瞭解其內部的機制。 最後,再弄清楚怎麼使用,這樣才算真正學會了。 換而言之,把要學習的技能比喻成實現某一功能的函數,那麼瞭解函數的功能、函數的 ...
學習一樣東西,我們首先要知道為什麼要學這個,或者說這個東西能起到什麼作用。這樣才能更加有目的、有效率地進行學習。
然後再問為什麼這個東西能實現這樣的效果,從而瞭解其內部的機制。
最後,再弄清楚怎麼使用,這樣才算真正學會了。
換而言之,把要學習的技能比喻成實現某一功能的函數,那麼瞭解函數的功能、函數的具體實現以及函數的調用方法,就算懂得了這個函數。
一、為什麼要學設計模式?
學習設計模式是為了提高軟體代碼的健壯性、可修改性和擴展性、提高開發的效率、方便程式員設計時的互相交流。個人覺得,首要的是擴展性。
事實上,如果設計一款軟體僅僅是為了實現功能這一目的,我們根本不需要什麼設計模式,只需要把代碼寫上去,可能代碼的結構一團糟,但是能運行就可以了。那麼請思考一下這樣設計出來的軟體和按照正規設計模式設計出來的軟體在設計和維護上的優缺點對比,就不難理解上面那句話了。
二、設計模式通過怎樣的內部實現提供了這些優點?
設計模式的原則(設計模式應當遵循的基本規則,這樣才能保證設計模式能達到預期效果)
總原則:開閉原則。對擴展開發,對修改關閉。
單一職責原則——要方便擴展,就要儘可能地使每個類的功能單一化,個人理解。
里氏替換原則——子類能夠替換父類,才能保證擴展性。
依賴倒轉原則——寫代碼要用到具體類時,不與具體類進行交互,而是與它的上層介面進行交互,這樣之後要進行擴展時,就不需要更改這部分交互的代碼。
介面隔離原則——每個介面不應存在子類用不到卻又必須實現的方法,(否則該介面視為過於複雜,相當於有額外的功能),否則該介面應當拆分。
迪米特法則(最少知道法則)——一個類對自己依賴的類知道的越少越好,否則當被依賴的那個類進行擴展時,耦合度太高,會影響到當前類。