### 單一職責原則
導入:手機的拍攝功能在強大也不如單反將照片拍得有藝術感,因為單反就一個功能就是拍出最完美的照片不是嗎
概念:就一個類而言,應該僅有一個引起它變化的原因
優點:維護簡便、靈活性、復用性強,減弱了模塊之間的耦合性
舉例:俄羅斯方塊游戲的游戲區域和游戲邏輯的分離,保證了form窗體只是用來顯示游戲的畫面而不用考慮是否撞壁、是否消層等邏輯判斷,這樣既方便了form窗體的顯示,也可以將邏輯功能模塊再次利用
###開放—封閉原則(核心)
導入:有一個偉人在1997年將香港重新收入祖國的懷抱,一個壯舉就是“一國兩制”,一個中國不能改變,但實行的制度卻從社會主義又擴展了一個資本主義
概念:軟件實體(類、模塊、函數等等)可以擴展,不可修改,即對于擴展是開放的(類似于制度),對于更改是封閉的(類似于主權的歸屬),一般不可修改的部分都是抽象的
優點:易于維護、擴展、復用、靈活性好,面對易于不斷變化的需求提前做出抽象就能保證系統的安全穩定了
舉例:正常的工作時間是8個小時,這是不變的,我們卻可以根據員工的不同情況規定上下班的具體時間,這樣就不必因遲到影響心情而且工作時間并沒有減少
如果“+-*/”都在一個類中修改任何一個符號都要來修改這個類,因為不是封閉的所以安全性很差,如何將這些符號抽象成一個運算類,只需提供一個開放的接口,具體的運算符號來繼承就可以了
###依賴倒轉原則(標志)
導入:現在我們想給自己的電腦插根內存條,只要確保能跟主板的PCI插槽針腳相吻合就可以,并不需要考慮自己的主板的品牌
概念:高層模塊不依賴低層模塊,兩個都應該依賴抽象,抽象不應該依賴細節,細節應該依賴抽象
優點:只要接口是穩定的,任何一個更改都不必擔心其他受到影響,使得高層模塊和低層模塊都是容易被復用
舉例:一般業務邏輯的高層模塊都是一樣的,如果這些高層模塊具體的與某一種類型如sql server數據庫是綁定的,當換成access數據庫時高層模塊便不能復用
###里氏代換原則
導入:在動物界中企鵝是一種特殊的,然而在面向對象的繼承時企鵝因為不會飛所以并不是一種鳥,為什么呢?
概念:子類型必須能夠替換掉它們的父類型
優點:使得開放——封閉稱為可能,子類型的可代替性使得使用父類類型的模塊在無需修改的情況下就可以擴展
舉例:貓是繼承動物類的,以動物身份擁有吃、喝,當我們需要狗時,因為狗是動物,所以只需要更改實例化就可以了
###迪米特法則
導入:會計部和技術部沒有直接關聯,如果會計部電腦出現故障,如何避免因不認識技術部的人而電腦遲遲無法修理的尷尬呢
概念:如果兩個類之間不必直接發生通信,就不應該發生直接的相互作用,如何其中一個想調用另一個,通過第三者來調用
優點:強調了類之間的松耦合,使類更容易被復用

###合成/聚合復用原則
導入:現在的手機大多兼容性很強。不同型號的手機軟件都能共享,然而iOS系統和Android系統卻還不能共享這是為什么呢
概念:聚合表示一種弱的“擁有”關系,A包含B,但B不是A的一部分組合表示一種強的“擁有”關系,B是A的局部,二者是一體的該原則就是盡量使用合成/聚合少用繼承
優點:有助于保持每個類被封裝,并被集中在單個任務上。這樣類和類繼承層次會保持較小規模,并且不太可能增長為不可控的龐然大物
舉例:
