(零雨其蒙原創 轉載請注明)
2007
年
3
月
13
日星期二
第
35
章
包的設計
包設計的核心就是提供穩定的包設計,減少依賴造成的影響!
組織包結構的準則
??
準則
???
包在水平和垂直劃分上的功能性內聚。
最基本的“直觀性”原則是基于功能性內聚的模塊,將參與共同目的、服務、協作、策略和功能的強相關類型(類或接口)組織在一起。除此之外,還可以根據類型之間的偶合程度進行分組。
?
?
??
準則
???
由一族接口組成的包。
將一組功能上相關的接口放入單獨的包,與其實現類分離。
?
??
準則
???
用于正式工作的包和用于聚集不穩定類的包。
以包來發布產品,則將包內穩定的部分分成一個包(正式工作的包),包內需要經常修改和重新發布的部分分成一個包(用于聚集不穩定類的包)。基本策略:減少對不穩定包的廣泛依賴。
?
?
?
準則
???
職責越多的包越需要穩定。
職責多就意味著有許多包要依賴于此包,如果其不穩定,就會殃及許多依賴于它的包。
?
?
準則
?
使用工廠模式減少對具體包的依賴。
減少對其他包中具體類的依賴是提高包的穩定性的一個途徑。
?
準則
??
包之間沒有循環依賴。
解決循環依賴有兩個方案,一個是將參與循環的類型(類或接口)分解出來形成較小的新包;另一個是使用接口來打破循環,具體做法就是在一個新包中定義一個新的接口,使原來循環依賴的兩個類一個實現新的接口,一個依賴新的接口,
?
增強包的穩定性的方法
l????????
包中僅包含或者主要包含接口和抽象類
l????????
不依賴于其他的包(這種包是獨立的),或者僅依賴非常穩定的包,或者封裝了依賴關系以使其不受影響(比如將特定的實現細節隱藏在一個
fa?ade
對象之后,其他對象只對
fa?ade
對象產生依賴,這就是封裝依賴關系的一種方式。)。
l????????
包含相對穩定的代碼,這些代碼在發布之前經過充分的測試和精化。
l????????
強制規定具有緩慢的變化周期。
?
?
第
36
章
使用
GoF
模式完成更多對象的設計
關于異常和錯誤處理
???
在
UML
中,異常是一個特殊的信號(
Signal
)(表示對象之間的異步通信)。這意味著,在交互圖中,異常被表示為異步消息(
P429
)。
?
?
Proxy
代理模式
代理只不過是與被代理對象實現相同的接口,它保存指向被代理對象的引用,并且用于控制對被代理對象的訪問(
P431
)。
?
?
問題:
不希望或不可能直接訪問真正的主題對象時,應該怎么辦?
解決方案
:通過代理對象增加一層間接性,代理對象實現與主題對象相同的接口,并且負責控制和增強對主題對象的訪問。
?
我覺得代理對象(
Proxy Object
)就是一個和被代理的對象擁有相同接口的控制器,在正常情況下,它執行被代理對象的功能,如果失敗或其他原因,則轉向其他對象進行處理。更通俗的理解代理就像是經紀人,有什么事情經紀人會替藝人出面擺平,代替藝人回答問題,或者把問題的焦點轉向別處,比如經紀公司。
?
?
Abstract Factory
抽象工廠
問題:
如何創建實現相同接口的一族相關的類?
解決方案
:定義一個工廠接口(抽象工廠)。為每一族要創建的事物定義一個具體工廠類。也可以定義實際的抽象類來實現工廠接口,并且為擴展該抽象類的具體工廠提供公共服務。
?
剛開始看這個話覺得真是讓人費解,什么叫一族相關的類???看了例子隱約明白了,一族就是一堆,只不過這一堆有相似之處,就像是一個家族或種族的人一樣,比如
IBMJavaPOSDevicesFactory
和
NCRJavaPOSDevicesFactory
,它們是不同供應商提供的
POS
設備
Java
驅動程序。一個家族的人往往從事一樣的事(或許遠古時代是這樣,比如一個狩獵家族或食人家族),這一族類也實現相同接口(意味著它們擁有相同的公共方法)???/span>
436
頁的類圖就可以明白這個模式是怎么回事了。
?
?
Do It Myself
模式
“
Do It Myself
”
?
?
?
我(一個軟件對象)是對實際對象的抽象,由我來完成這些通常由實際對象所完成的事情。
[Coad95]
?
其實看了這個模式讓我覺得很高興,因為在此之前,我通過自己的學習實踐和領悟,覺得設計對象的最基本的原則就是在現實生活中這個對象是什么樣的(擁有什么屬性,能干什么事),設計的軟件對象就是什么樣的,這是最自然的原則。我覺得很多設計方面的問題都可以用最自然的方式解決,比如說工廠模式,很自然,實際生活中的對象(鞋子,人)都是由工廠創造的(或是母親生的);還比如說代理模式,如果你不能直接跟一個人打交道,自然就會尋找代理。
Larman
在這部分總是說“
DIM
模式和多態通常盜跖相同的設計選擇”“
DIM
模式和信息專家模式通常導致相同的設計選擇”。
Larman
說“這是經典的面向對象設計風格?!钡]有說這是最自然最根本的設計風格,或許在
Peter Coad
的著作中出現過這樣的字眼,有空再看看。不僅想到了莊子道家提倡的“大道自然”,最自然的東西就是最正確的,最合理的,最和諧的!人設計敵不過天設計(人算不如天算),現在人還不能設計出和自然界設計出來的人相媲美的機器人。