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

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

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

    cuiyi's blog(崔毅 crazycy)

    記錄點滴 鑒往事之得失 以資于發(fā)展
    數(shù)據(jù)加載中……

    QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)

    1. 首先介紹方法論,參考了《大道至簡 — 軟件工程實踐者的思想》
    2. DP與Spring、SOA類比,皆出于實踐
    3. DP的必要性和要點,輔助代碼簡要說明
    4. 拋磚引玉,介紹幾個DP:
        •   Factory Pattern
        • Decorator Pattern
        •  Proxy Pattern
        • SingLeton Pattern
        • Command Pattern
        • 其它
      • 介紹點:
        • a) 使用一些可與現(xiàn)實結(jié)合的生動例子(引用網(wǎng)上資源)
        • 介紹其本質(zhì)(個人理解)
        • 簡要介紹其如何使用


                       <一>開幕

    大家好,我是crazycy,今天我們討論的主題是Design Pattern

    首先感謝千年一嘆的安排和付出,雖然他極其的忙。

    今天的話題可能不很適合初學(xué)者,對于初學(xué)者的建議可以看我的文章:http://www.tkk7.com/crazycy/archive/2006/07/07/57106.html


                     <二> 設(shè)計模式的起因

    在談設(shè)計模式之前,我們想一下:為什么會有設(shè)計模式?

    Christopher Alexander說:每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題以及該問題的解決方案的核心。

    咱們大多是做研發(fā)的,往往有自己的體會,遇到問題--解決問題,這個過程中會發(fā)現(xiàn)有一些問題及其解決方案不斷變換面孔重復(fù)出現(xiàn),其后面的有著共同的本質(zhì)。實際上這些本質(zhì)就是模式。

    從哲學(xué)角度說,設(shè)計模式的出現(xiàn)是實踐經(jīng)驗的結(jié)晶,是產(chǎn)生于實踐并指導(dǎo)實踐。


                     <三>聯(lián)想

    說到這里,我們現(xiàn)在用的、談的比較火爆的就是Spring Hibernate之類的框架。是吧?

    Struts直接革新了Web Model 2的應(yīng)用。
    Hibernate直接解決了持久層的非面向?qū)ο蟮膶擂巍?br /> Spring直接挑戰(zhàn)了原先的Java EE框架。

    這些都是源于實踐。選擇一種架構(gòu)、一種技術(shù)的依據(jù)是什么? Rod Johnson 認(rèn)為,應(yīng)該是基于實踐的依據(jù)、來自歷史項目或親自試驗的經(jīng)驗,而不是任何形式的偶像崇拜或者門戶之見。 這個是循序方法:實踐的反復(fù)總結(jié)。(十足的哲學(xué))

    為什么說Spring是實踐的總結(jié):大家可以看一下我的blog的一片文章http://www.tkk7.com/crazycy/archive/2006/06/05/50519.aspx  比較簡略。


                    <四> 哲學(xué)

    周愛民先生的《大道至簡 — 軟件工程實踐者的思想》對方法、方法論有如下描述:
    ============================================================================================================
    3. 方法

    推動這種邏輯向前發(fā)展的,是 方法 方法論 的出現(xiàn)。長期的編程實踐,自然的歸演與總結(jié),必須沉淀為某種 ( 軟件開發(fā) ) 方法,于是 過程 出現(xiàn)了,于是 對象 出現(xiàn)了,于是相關(guān)的方法論也就出現(xiàn)了。

    這是實踐的成果。方法不是某個人或者某個組織創(chuàng)造的。瓜熟而蒂落,實踐積累達到一定的程度,微軟不提出某個方法, IBM 也會提出這個方法。即便他們都不提出,可能你自己已經(jīng)在使用這個方法了。

    方法并不神秘,因為它就是你今天正在做的、從事的和實現(xiàn)的。正如 模式 是一種方法,而模式就是你昨天書寫代碼的那個行為。只不過, GoF 歸納、抽取、提升了這些行為的內(nèi)在規(guī)律。

    你看不到你做事的行為,也就不能理解 模式 作為一種方法的價值。所以大師們眾口一詞:模式需要一定的編程經(jīng)驗才能理解。

    同理,理解過程也需要編程經(jīng)驗,理解對象也需要編程經(jīng)驗,理解 MDA SOA 還是需要編程經(jīng)驗。

    —— 這可能就發(fā)生在你去回顧你上一行代碼編寫的經(jīng)過,或者上一個項目失敗的經(jīng)歷的那一瞬息。經(jīng)驗來源于回顧、理解與分析,而不是你將要寫的下一行代碼。

    有人在寺院掃了一輩子的落葉而得道,也有人因為一句話而得道。

    GoF 因為無數(shù)次的代碼回顧而得道。

    感覺不過癮可以看一下我的blog文章:
    http://www.tkk7.com/crazycy/archive/2006/05/24/47799.html

    而對于方法論,查了一下大概闡述如下:方法論是一套完整的實踐引導(dǎo)體系,是指導(dǎo)實踐的理論基礎(chǔ),是人們在長期社會實踐中總結(jié)和摸索出來的,符合客觀發(fā)展規(guī)律的,符合人們對研究對象進行科學(xué)分析與判斷的社會實踐進程或步驟。方法是實踐的成果,如同瓜熟蒂落,實踐積累達到一定程度,必然會提出方法。

                 
                <五>DP產(chǎn)生的必要性和目標(biāo)

    咱們大家對OO編程都熟悉,OO的三個基本特征:封裝、繼承、多態(tài)。

    OO解決不了的問題--Java為例子:
    java語言要求將一個類實例化時,必須調(diào)用這個類的具體類的構(gòu)造子,所以java語言給出的類的實例化方法無法做到只依賴抽象類型。
    這造成了調(diào)用者合被調(diào)用者的一種緊耦合

    設(shè)計模式追求的目標(biāo)是調(diào)用者和被調(diào)用者之間的解耦。

    示例:
    消費一個對象的客戶端只依賴于對象的抽象類型,而不是具體類型

    A類:
    State state = new StartState();
    工廠類:
    public class StateFactory {
    public State static createState() {
          State state  =  new. StartState();
            return state;
        } 
    }
    A類:
    State state = StateFactory.createState();
    這樣就很容易理解工廠類就是生產(chǎn)對象,也就是創(chuàng)建對象,把對象的創(chuàng)建過程從類A中摘取出來.

    這樣也就達到了DP的目標(biāo),也正是因為這個目標(biāo)的提出,才誕生了IoC。
    可以參考的我blog文章:http://www.tkk7.com/crazycy/archive/2006/03/19/36068.aspx


    這里有朋友問抽象工廠和工廠方法兩個模式的區(qū)別,
    可以參考我的blog文章:http://www.tkk7.com/crazycy/archive/2006/10/08/73858.html


                        <六>介紹幾個模式
    Decorator模式是
    1. 對真實對象進行包裝
    2. 使其功能擴展
    3. 表現(xiàn)形式:new 包裝類1(new 包裝類2(真實對象));這樣真實對象就具備了本身、包裝類1、包裝類2的功能;
    4. 實現(xiàn)時只需要把真實對象做為包裝類的聚合對象;
    實在不行就想想ML時,如果帶上TT后,原來的不影響,而且還安全了。主要就是包裝原先的對象。

    可參考我的blog文章:http://www.tkk7.com/crazycy/archive/2006/04/30/44169.html



    Dynamic Proxy模式是
    代理模式(Proxy,這里側(cè)重于Dynamic Proxy)可以理解成給一個對象提供一個代理對象,這個代理對象就是把原對象進行包裝,使其與調(diào)用處理器相關(guān)聯(lián)。
    因為代理對象和真實對象具有相同的接口,客戶訪問時,通過接口調(diào)用代理實例的方法,這個調(diào)用會被分發(fā)到該實例對應(yīng)的處理器。處理器在把客戶端調(diào)用傳遞給真實的對象之前或者之后,可執(zhí)行某個操作,也可以選擇不把這個調(diào)用傳遞給真實的對象。
    1. 將真實對象包裝
    2. 使其與調(diào)用處理類綁定
    3. 表現(xiàn)形式:Proxy.newProxyInstance(realObject.getClass(). getClassLoader(), realObject.getClass().getInterfaces(), new InvocationHandler(realObj));這樣真實對象就與InvocationHandler類邦定了,對外是一個代理類的形式;
    4. 實現(xiàn)時只需要把真實對象做為調(diào)用處理器的聚合對象
    實在不行就想想:垂簾聽政:猶如清朝康熙年間的四大府臣,很多權(quán)利不在皇帝手里,必須通過輔佐大臣去辦;
    具體示例參加blog:
    http://www.tkk7.com/crazycy/archive/2006/04/29/44006.html


    Command模式
    本質(zhì):將調(diào)用操作的對象 和 知道如何實現(xiàn)改操作的對象 解耦。
    1 調(diào)用者
     發(fā)出請求的對象,請求被包裝成請求對象的形式(側(cè)重于對象)
    2 接收者
     知道如何處理某個請求的對象。
    3 關(guān)聯(lián)者
     具備調(diào)用者傳入的請求對象;
       并且綁定接收者。

    大家都用過Struts吧?
    或許Struts的Action就是一個很好的說明示例:
     Public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res)
    方法的action就是關(guān)聯(lián)者
    方法的req可以理解成請求者
    方法的form 就是請求對象
    方法的mapping就是接收者

     

    posted on 2006-07-05 22:34 crazycy 閱讀(3172) 評論(7)  編輯  收藏 所屬分類: JavaEE技術(shù) 、Design Pattern、JEE Pattern

    評論

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    還是Struts? 有沒有WEBWORK呢
    2006-07-08 09:03 | 醉天涯

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    @醉天涯
    WEBWORK 沒有接觸過 怕誤導(dǎo)....
    2006-07-08 09:55 | crazycy

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    挺不錯的討論,如何加這個群
    2006-07-12 15:05 | pesome

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    群號:14506793
    2006-07-12 19:17 | crazycy

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    為什么不能加入那個QQ群呢?
    2006-07-24 13:50 | NightFlyig

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    同問,我也加不了,555
    2006-07-30 18:17 | dyerac in java...

    # re: QQ群:Java技術(shù)聯(lián)盟 第三次技術(shù)討論之設(shè)計模式(完整版)  回復(fù)  更多評論   

    你的工廠模式多了個點?。海?
    2006-12-31 00:21 | 123
    主站蜘蛛池模板: 久久亚洲精品无码gv| 亚洲粉嫩美白在线| 国产无限免费观看黄网站| 免费观看四虎精品国产永久| 国产精品亚洲av色欲三区| 国产成人在线观看免费网站 | v片免费在线观看| 亚洲人成网站色在线入口| 在线播放免费人成视频网站| AV在线亚洲男人的天堂| 国产在线观看免费视频软件| 亚洲人成电影亚洲人成9999网| 在线观看的免费网站无遮挡| 亚洲三级在线免费观看| 欧美大尺寸SUV免费| 在线91精品亚洲网站精品成人| 免费在线观看日韩| 国产日韩在线视频免费播放| 久久狠狠爱亚洲综合影院 | 日本不卡视频免费| 精品亚洲av无码一区二区柚蜜| 日本视频免费在线| 日亚毛片免费乱码不卡一区 | 亚洲va乱码一区二区三区| 毛片a级毛片免费播放下载| 亚洲a∨国产av综合av下载 | 国产亚洲成归v人片在线观看| 人妻免费一区二区三区最新| 亚洲特级aaaaaa毛片| 国产三级电影免费观看| 少妇性饥渴无码A区免费| 亚洲精品伊人久久久久| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲精品宾馆在线精品酒店| 亚洲国产高清在线一区二区三区| 大地影院MV在线观看视频免费| 亚洲国产精品成人精品小说| 俄罗斯极品美女毛片免费播放| 99精品在线免费观看| 亚洲乱码av中文一区二区| 亚洲综合无码精品一区二区三区|