(1) dot not repeat yourself
在兩個或者多個地方發現相似的代碼的時候,我們需要把它們的共性抽象出來,形成一個唯一的方法,然後改變現有地方的代碼讓他們以合適
的參數調用這個新方法。
(2) Program to an interface,not an implement
設計模式中的重要思想,注重介面,而不是實現,依賴介面而不是實現。
(3) command - query
查詢:當一個方法返回一個值回應一個問題的時候,它就是查詢的性質。
命令:當一個方法要改變對象的狀態的時候,它就是命令性質。
在設計介面時候保證介面的單一化,保證方法的行為為嚴格的命令或者查詢。
(4) principle of least Knowledge 最少知識原則
對於對象o 中的方法m ,m 只能訪問如下對象的方法
1,對象0。
2,與o直接相關的Component object。
3,由方法M建立或者執行個體化的對象。
4,作為方法M的參數對象。
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
這麼長的一串對其它對象的細節,以及細節的細節,細節的細節的細節……的調用,增加了耦合,
使得代碼結構複雜、僵化,難以擴充和維護。
(5) Single Responsibility Principle 職責單一原則
其核心的思想是:一個類,只做一件事,並把這件事做好,其只有一個引起它變化的原因。
單一職責原則可以看作是低耦合、高內聚在物件導向原則上的引申。
(6) Open/close Principle 開閉原則
關於開發封閉原則,其核心的思想是:模組是可擴充的,而不可修改的。也就是說,對擴充是開放的,而對修改是封閉的。
對擴充開放,意味著有新的需求或變化時,可以對現有代碼進行擴充,以適應新的情況。
對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。
(7) Dependency Inversion Principle (DIP) – 依賴倒置原則
高層模組不應該依賴於低層模組的實現,而是依賴於高層抽象。
舉個例子,牆面的開關不應該依賴於電燈的開關實現,而是應該依賴於一個抽象的開關的標準介面,這樣,
當我們擴充程式的時候,我們的開關同樣可以控制其它不同的燈,甚至不同的電器。
這就好像瀏覽器並不依賴於後面的web伺服器,其只依賴於HTTP協議。這個原則實在是太重要了,社會的分工化,
標準化都是這個設計原則的體現。
(8) Hollywood Principle – 好萊塢原則
好萊塢原則就是一句話——“don’t call us, we’ll call you.”。意思是,好萊塢的經紀人們不希望你去聯絡他們,
而是他們會在需要的時候來聯絡你。也就是說,所有的組件都是被動的,所有的組件初始化和調用都由容器負責。
組件處在一個容器當中,由容器負責管理。
簡單的來講,就是由容器控製程序之間的關係,而非傳統實現中,由程式碼直接操控。這也就是所謂“控制反轉”的概念所在:
1.不建立對象,而是描述建立對象的方式。
2.在代碼中,對象與服務沒有直接聯絡,而是容器負責將這些聯絡在一起。