再次翻閱Head First Design pattern,看到一小段範例,我覺得可以來做個簡單的註解了...
首先必須說的是,Dependency 是一種較為弱化的類別相依關係的描述,他不像是去說明 abstract / concrete / structural 的描述,對於類別結構性的描述並不是dependency要講述的內涵,dependency比較像是簡單地指出類別之間的相互存有或使用的概念,在P.138當中,舉例提到了一個 PizzaStore,再產生pizza的時候,是直接透過判斷客戶要什麼口味的pizza(傳入 type),則透過一堆 if else 來直接實際 new一個特殊口味的pizza來,這樣的動作中,我可以很清楚的理解到, PizzaStore 跟 Pizza derived classes是完全的相依了,這表示說一但 Pizza derived classes改過了,那麼我的PizzaStore的產生pizza程式就得到處改了(違反了OCP原則),像這樣的狀況,就是Dependency。
好吧,雖然還沒有勇氣去直接翻UML Spec找 Dependency定義,但就先從這樣的概念來逐步驗證我的想法了。
Dependency 可以想見的是,在某個method中傳入一個類別來使用,至於是不是一定都有初始化這就不一定了!!!
很明確的在程式中減少這麼多的依賴是對的,在OO Principle中就有這一條 : Dependency inversion Principle
通則是: 依賴抽象類別,不要依賴具象類別,也就是說在PizzaStore中再產生pizza時,是傳入一個Pizza介面,而非一個具象的Pizza類別。
顛覆相依守則的幾個原則
- 變數不可持有具象類別的參考
- 不要讓類別繼承自具象類別
- 不要讓子類別中的方法override父類別的方法
沒有留言:
張貼留言