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

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

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

    love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    friends

    link

    最新評(píng)論

    java與模式雜談

    一? 綜述:
    1、不要使用接口定義常量
    2、自己少用標(biāo)志接口
    3、不要繼承具體類(lèi)
    4、類(lèi)層次的中間節(jié)點(diǎn)應(yīng)該是接口或者抽象類(lèi),葉子是具體類(lèi)
    5、子類(lèi)應(yīng)當(dāng)擴(kuò)展父類(lèi)的責(zé)任,而不是覆寫(xiě)父類(lèi)的責(zé)任
    6、面向接口編程
    7、不要濫用繼承,組合優(yōu)先于繼承

    java中設(shè)計(jì)不當(dāng)?shù)念?lèi):calendar:作為接口,含有與具體的歷法(羅馬歷法)相關(guān)的常量,不能擴(kuò)展到中國(guó)的陰歷歷法(不符合開(kāi)閉原則)
    ??????????????????? properies類(lèi):濫用繼承,繼承至hashtable,應(yīng)當(dāng)使用聚合

    8、笛比特法則:只與自己的直接朋友通信,不與陌生人通信(1)狹義笛比特法則:只與朋友通訊,通過(guò)自己的朋友傳遞間接的調(diào)用(2)結(jié)合依賴(lài)倒轉(zhuǎn)原則修改:不必通過(guò)朋友傳遞間接的調(diào)用,通過(guò)陌生人的抽象接口調(diào)用陌生人的行為(依舊不能與具體的陌生人發(fā)生通信)
    9、盡量降低類(lèi)中成員的訪問(wèn)權(quán)限,不要設(shè)計(jì)退化類(lèi)(類(lèi)似c中struct)。
    ??????? java中的point2D以及Dinmension2D類(lèi)有這種設(shè)計(jì)缺陷(不過(guò)這種情況問(wèn)題不大)
    10、如果多個(gè)具體的產(chǎn)品類(lèi)沒(méi)有共同的商業(yè)邏輯,就可以把它們抽象到一個(gè)接口中,如果有共同的商業(yè)邏輯,就把共同的部分抽象到抽象類(lèi)中,共同的部分盡量向類(lèi)繼承層次的上層移動(dòng),以達(dá)到復(fù)用的目的
    二?? 工廠模式
    1、簡(jiǎn)單工廠模式:參與角色:工廠/抽象產(chǎn)品類(lèi)/具體產(chǎn)品類(lèi)

    ?? 缺點(diǎn):添加新產(chǎn)品的時(shí)候,雖然產(chǎn)品相關(guān)代碼符合開(kāi)閉原則,但對(duì)工廠類(lèi)本身并不符合,需要修改其中的產(chǎn)生產(chǎn)品方法或者添加新的產(chǎn)生方法(工廠里實(shí)現(xiàn)的不同造成的修改不同)來(lái)支持新的產(chǎn)品類(lèi)
    ?? 退化方式:省略掉工廠角色,抽象產(chǎn)品類(lèi)擔(dān)任具體產(chǎn)品類(lèi)的工廠角色:提供靜態(tài)的getInstance方法,比如java類(lèi)庫(kù)中的DateFormat類(lèi),(本人認(rèn)為這樣很不符合開(kāi)閉原則,父類(lèi)中出現(xiàn)與具體子類(lèi)相關(guān)的代碼,不方便擴(kuò)展,添加新產(chǎn)品的時(shí)候,修改的時(shí)候缺點(diǎn)與原簡(jiǎn)單工廠的工廠角色類(lèi)似)

    2、工廠方法模式:參與角色:抽象工廠類(lèi)/具體工廠類(lèi)/抽象產(chǎn)品類(lèi)/具體產(chǎn)品類(lèi)
    ???? 消除了簡(jiǎn)單工廠的缺點(diǎn)


    3、抽象工廠模式:簡(jiǎn)單工廠模式與工廠方法模式的結(jié)合

    4、單例模式:餓漢和懶漢兩種,前者將本身對(duì)象作為靜態(tài)私有屬性事先生成,后者推遲到調(diào)用的時(shí)候,后者需要考慮多線(xiàn)程的時(shí)候,前面需要加線(xiàn)程安全關(guān)鍵字(注意),java中還是前者為優(yōu)。
    ?? 不要濫用單例,只有系統(tǒng)要求只有一個(gè)類(lèi)的實(shí)例的時(shí)候才調(diào)用
    ?? 有的單例可能有狀態(tài)屬性,這就為多例模式提供了可能
    ?? 含有私有屬性的類(lèi)作成單例的時(shí)候尤其要注意:一是私有屬性的線(xiàn)程安全,確實(shí)需要的時(shí)候可以加線(xiàn)程安全關(guān)鍵字,比如系統(tǒng)中的log類(lèi),二是確認(rèn)這些屬性是不是可以所有線(xiàn)程共享的,類(lèi)似普通類(lèi)的static
    三?? 各種具體模式(1)
    1、建造模式:參與角色4個(gè):指導(dǎo)者、抽象建造對(duì)象、具體建造對(duì)象、產(chǎn)品
    ????? 一個(gè)復(fù)雜的產(chǎn)品有很多的零部件,就可以使用具體的建造對(duì)象來(lái)一一構(gòu)造
    2、原始模式:深拷貝、淺拷貝
    3、適配器模式:將adaptee類(lèi)適配成目標(biāo)接口
    4、合成模式:參與角色:composite接口、樹(shù)枝節(jié)點(diǎn)類(lèi)、樹(shù)葉節(jié)點(diǎn)類(lèi)
    ????? 分成透明式和安全式兩種,各有優(yōu)缺點(diǎn)
    ????? (1)前者將管理子對(duì)象的方法放到接口中,這樣樹(shù)型結(jié)構(gòu)中的所有對(duì)象都是透明的,都可以統(tǒng)一調(diào)用,但是葉節(jié)點(diǎn)并沒(méi)有管理子對(duì)象的能力,因此透明但不安全
    ????? (2)后者將管理子對(duì)象的方法下放到樹(shù)枝節(jié)點(diǎn)類(lèi)中,這樣安全但不透明
    5、裝飾模式:繼承已有類(lèi)的接口,提供和已有類(lèi)相同的方法,并對(duì)已有類(lèi)的功能提供擴(kuò)展(通過(guò)組合已有對(duì)象,調(diào)用已有對(duì)象方法的時(shí)候加入新的代碼)
    ????? (1)透明的裝飾模式(純粹的裝飾模式):裝飾類(lèi)、被裝飾類(lèi)繼承于同一接口,而且裝飾類(lèi)只實(shí)現(xiàn)接口的方法,不提供額外方法的實(shí)現(xiàn),調(diào)用該類(lèi)的時(shí)候使用接口聲明調(diào)用(實(shí)例化當(dāng)然還是自己的構(gòu)造函數(shù)),即該類(lèi)的所有方法都是透明的
    ????? (2)半透明的裝飾模式(退化的裝飾模式):裝飾類(lèi)、被裝飾類(lèi)繼承于同一接口,裝飾類(lèi)不僅實(shí)現(xiàn)接口的方法,還提供額外方法的實(shí)現(xiàn),這樣要調(diào)用它獨(dú)特的方法的時(shí)候就必須使用它本身來(lái)調(diào)用,退化到一半裝飾模式、一半適配器模式。

    posted on 2006-09-01 13:45 liaojiyong 閱讀(206) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java

    主站蜘蛛池模板: 久久久久无码精品亚洲日韩| 日本xxwwxxww在线视频免费| 亚洲?V乱码久久精品蜜桃 | 国产成人综合久久精品亚洲| 成年女人免费视频播放77777 | 一区二区三区免费视频播放器| 香蕉视频在线观看免费国产婷婷| 狠狠色伊人亚洲综合网站色| 久久受www免费人成_看片中文| 亚洲一级毛片免费看| 91视频国产免费| 亚洲中文无码mv| 思思99re66在线精品免费观看| 亚洲精品美女久久7777777| 国产精品免费一级在线观看| 一级毛片免费在线播放| 国产亚洲人成网站在线观看不卡| 无码精品人妻一区二区三区免费看 | 亚洲视频在线观看视频| 成人浮力影院免费看| 亚洲精品成a人在线观看☆| 一区二区三区亚洲视频| 久久久WWW成人免费精品| 精品日韩亚洲AV无码| 免费人成视频在线| 无码日韩人妻AV一区免费l| 亚洲日产无码中文字幕| 6080午夜一级毛片免费看| 中文文字幕文字幕亚洲色| 午夜两性色视频免费网站| 一二三区免费视频| 亚洲理论片在线中文字幕| 日韩免费高清一级毛片在线| 国产黄片不卡免费| 亚洲日韩乱码中文无码蜜桃| 成在线人永久免费视频播放| 国产在线精品观看免费观看 | 亚洲AV性色在线观看| 久久乐国产精品亚洲综合| 97在线视频免费播放| 色欲aⅴ亚洲情无码AV蜜桃|