設計模式常用設計原則總結
一、單一職責原則(SRP)
就一個類而言,應該僅有一個引起它變化的原因。
舉個栗子
俄羅斯方塊,下落,旋轉,碰撞判斷,移動,堆積遊戲邏輯可以在不同平臺複用,介面和遊戲邏輯要分離。
總結
如果一個類承擔的職責過多,就等於把這些職責耦合在一起,一個職責的變化可能消弱或抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭到意想不到的破壞。如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責。
二、開放封閉原則(OCP)
軟體實體(類、模組、函式)應該可以擴充套件,但是不可修改。即:對於擴充套件是開放的,對於更改是封閉的。
舉個栗子
香港迴歸,鄧小平在和英國首相撒切爾夫人談判時,大陸的社會主義不可以更改,香港被資本主義長期殖民,強行修改制度也不合理,所以在思想上進行了拓展,一個國家兩種制度,提出了偉大思想一國兩制。
總結
開放-封閉原則是面向物件設計的核心所在,遵循這個原則可以帶來面向物件技術所聲稱的巨大好處,也就是可維護,可擴充套件,可複用,靈活性好。開發人員應該僅對程式中呈現出頻繁的變化的那些部分做抽象,然而,對於應用程式中的每個部分都刻意地進行抽象同樣不是一個好主意,拒絕不成熟的抽象和抽象本身一樣重要。切記,切記。
三、依賴倒轉原則
面向介面程式設計,不要對實現程式設計。高層模組不應該依賴底層模組。兩個都應該依賴抽象。抽象不應該依賴細節。細節應該依賴抽象。
舉個栗子
pc裡如果cpu、記憶體、硬碟都需要依賴具體的主機板,主機板一壞,所有部件就沒用了,這顯然不合理,返過來,如果記憶體壞了,也不應該造成其他部件不能用才對。 收音機耦合太高,修起來太費勁,就是一個典型的栗子。
總結
依賴倒轉其實可以說是面向物件設計的標誌,用那種語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式的所有依賴關係都是終止於抽象類或者介面,那就是面向物件的設計,反之那就是面向過程化設計。
四、里氏替換原則
子型別必須能夠替換掉它們的父型別。
舉個栗子
一個鳥類,一個企鵝類,如果鳥可以飛,企鵝不會飛,那麼企鵝是鳥麼? 子類擁有父類所有非private的行為和屬性。鳥會飛,而企鵝不會飛。儘管在生物學分類中,企鵝是一種鳥,但是企鵝不能以父類–鳥的身份出現,因為前提說鳥都能飛,但企鵝飛不了,所以企鵝不能繼承鳥類。
總結
只有當子類可以替換掉父類,軟體單位的功能不受影響,父類才能被真正複用,而子類也能夠在父類的基礎上增加新的行為。也可以這樣講,正是由於子類的可替換性才使得父類型別的模組在無需修改的情況下就可以擴充套件。 未完,待續。。。