本文是「無招勝有招」的核心。首先宣告這裡講的設計原理和方法基本上是基於「可擴充套件性」做出的。當系統面臨變化的時候,如何抵擋變化對系統的衝擊。
先看乙個例子,如果乙個類a呼叫了b中的乙個方法,那麼我們說a依賴於另乙個類b。你可以想象成a騎在b身上。當b動的時候,a也要跟著動。我們的目標是b自己都跟自己的,a完全沒有感覺。
物件導向設計中的多型(虛函式,動態繫結)可以實現這樣的目標。所謂的多型就是保持函式signature不變的情況下,實現不同的功能。
假設有乙個抽象類animal,有兩個具體類cat和dog。animal中有虛函式makesound().
我們就可如下程式設計
animal animal = getanimal()// 這個getanimal裡面可能有 new dog()這樣的語句。
animal.makesound();
可以看到,不論狗如何變化,這裡都不會變化。甚至當狗變成貓的時候,這裡也不會有任何變化。
這個就是可擴充套件性的最基本的語法上的支援和最基本的原理。
那麼怎麼樣使得你的**能演變成這樣的**呢?
這裡提供了幾個方法。
解耦,封裝變化,抽象,優先使用組合,針對介面程式設計
設計模式無招勝有招之設計原則
這裡的設計原則是大家公認的六條設計原則,即 單一職能原則 開閉原則 依賴倒置原則 黎克特制替換原則 介面隔離原則 迪公尺特法則 其實前面設計方法中有些也是原則,但是不是公認的原則,就歸置到了設計方法中。關於這幾條的好的文章參見 我這裡再加幾句描述。這個幾條原則基本上也是解耦的原則。從解耦的角度看 單...
無招勝有招 物件導向設計模式隨筆
最近在學習物件導向設計模式,gof的23種設計模式大概看了一遍,簡單總結一下,設計模式主要分為三種模式,分別是建立模式,結構模式,行為模式。回過頭想一下具體有哪些模式,在什麼情況下用什麼設計模式,好像還是一頭霧水,但是我有幾點我卻印象深刻,下面就來說說我的感受。什麼是設計模式,我認為設計模式就是前人...
無生有 無勝有 PK 設計模式
無生有 無勝有 pk 設計模式 無生有,無勝有!如果乙個事物從無發展到有,那麼它以後的發展將受到這個 有 的因子的影響。並且有時,如果這個 有 的因子,是非常致命 強勢 根基,那麼後續它所衍生的子孫,可能都必須沿著它在幾個世紀前規定好的歷史固定的路線走,地球圍繞太陽的橢圓軌道執行,才能 允許出生 名...