單一職責原則:編程
就一個類而言,應該僅有一個引發他變化的緣由。spa
目的是爲了儘量的解耦。接口
例子:產品
若是是一個鳥類,應該只有鳥的變化是改變這個類的緣由,天氣和豬的變化不該該是改變這個類的緣由;擴展
若是是一個鳥的腳類,應該只有鳥的腳的變化是改變這個類的緣由,鳥的嘴和豬的變化不該該是改變這個類的緣由;程序
開放-封閉原則:客戶端
對擴展開放,對修改封閉。co
目的是爲了程序能儘量無限擴展,而不是僅僅改變。background
然而對程序中的每一個部分都刻意抽象是更糟糕的想法,請記住,拒毫不成熟的抽象和抽象自己同樣重要。工廠模式
例子:
當初老子只生產蘋果:客戶端-蘋果類
後來二筆產品要老子同時生產草莓,老子當即抽象這個變化:客戶端-水果類 蘋果子類 草莓子類,並機制的使用工廠模式封裝子類產品。
依賴倒轉原則:
模塊之間不該該互相依賴,它們都應該依賴抽象;抽象不該該依賴細節,細節應該依賴抽象。
即針對接口編程,具體一點就是接口類或抽象類。程序中的依賴關係都應該終止於抽象類或者接口。
里氏代換原則:
子類必須能替換掉它們的父類。程序中用子類代替父類,程序的行爲應該是沒有變化的。
這要求子類具有父類的全部行爲和特徵。
例子:
想一想策略模式,客戶端只依賴context接口和策略抽象類,具體策略實現和客戶端不要緊;具體策略類只依賴並實現策略抽象類,具體客戶端怎麼使用也和具體策略類不要緊。