面向物件設計三大原則(封裝變化點,對介面進行程式設計,多使用組合而不是繼承)
該三大原則應該算是OO的基礎,很多OO設計原則和設計模式都是在此三大原則上面衍生髮展而來。所以對於學習設計模式的人,瞭解這三大原則顯然是非常必要的。
1.面向物件設計的第一原則:封裝變化點。隔離變化點的好處在於,將系統中經常變化的部分和穩定的部分隔離,有助於增加複用性,並降低系統耦合度。很多設計模式的意圖中都明顯地指出了其對問題的解決方案,學習設計模式的要點是發現其解決方案中封裝的變化點。
2.面向物件設計的第二原則:對介面進行程式設計。這裡“介面”的含義表示的程式設計語言中的interface ,或者abstract class。對介面程式設計的一個好處在於客戶端程式並不需要了解具體的實現,而只需要瞭解介面中宣告的方法。更大的好處在於能夠使用多型性執行動態性的行為。
比如對實現程式設計方式:
Dog dog = new Dog();
dog.bark();
而對介面進行程式設計方式:
Animal animal = new Dog();
animal.makeSound();
或者:
Animal animal = getAnimal();
animal.makeSound();
作為客戶端程式,它並不關心makeSound()如何實現,自有多型效能夠幫助程式在執行時執行。
3.面向物件設計的第三原則:多使用組合,而不是繼承。Has-a關係要比Is-a關係更好。因為繼承是靜態行為,也就是編譯時行為。這種設計缺乏靈活度,並且具有比組合更高的耦合度。而組合是動態行為,即執行時行為。可以通過使用組合的方式在設計上獲得更高的靈活性。GOF設計模式中將設計模式分為物件設計模式和類設計模式,其中物件設計模式居多,原因就在於物件設計模式多使用組合,通過此獲得更好的靈活性。
以上3點在許多OO書中都會提及,我在《GOF設計模式》,《設計模式解析》,《Head First Design Pattern》中都有看到,可見是非常重要的。在閱讀設計模式的時候應該聯絡這三點進行理解。