<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零雨其蒙's Blog

    做優秀的程序員
    隨筆 - 59, 文章 - 13, 評論 - 58, 引用 - 0
    數據加載中……

    零雨其蒙《UML和模式應用》學習筆記(十)

    (零雨其蒙原創 轉載請注明)

    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 的著作中出現過這樣的字眼,有空再看看。不僅想到了莊子道家提倡的“大道自然”,最自然的東西就是最正確的,最合理的,最和諧的!人設計敵不過天設計(人算不如天算),現在人還不能設計出和自然界設計出來的人相媲美的機器人。

    posted on 2007-03-20 14:58 零雨其蒙 閱讀(390) 評論(0)  編輯  收藏 所屬分類: 學習筆記

    主站蜘蛛池模板: 最近中文字幕mv免费高清在线 | 国产成人高清亚洲一区91| 在线观看亚洲免费| 国产成人无码免费网站| 亚洲图片一区二区| 四虎永久成人免费| 国内精品免费视频精选在线观看| 亚洲人成激情在线播放| 久久精品国产精品亚洲| 久久WWW免费人成人片| 国产免费牲交视频免费播放| 亚洲人成人77777网站不卡| 国产乱辈通伦影片在线播放亚洲 | 一级特级aaaa毛片免费观看| 久久久亚洲欧洲日产国码是AV| 国产网站免费观看| 91av视频免费在线观看| 国产精品无码亚洲精品2021| 亚洲人成网站在线播放影院在线| 国产精品黄页在线播放免费| 18以下岁毛片在免费播放| 一个人看的www免费在线视频| 亚洲综合伊人制服丝袜美腿| 国产亚洲免费的视频看| 国产一级淫片免费播放| 91精品免费久久久久久久久| 国产免费A∨在线播放| 亚洲欧洲无码AV不卡在线| 亚洲综合视频在线| 黑人大战亚洲人精品一区| 国产福利免费观看| 91在线视频免费看| 无码免费一区二区三区免费播放| 污污视频免费观看网站| 亚洲AV成人一区二区三区在线看| 亚洲2022国产成人精品无码区 | 一本色道久久88亚洲综合| 中文字幕av无码无卡免费| 91成人在线免费视频| 日韩免费电影网站| 中国videos性高清免费|