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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
    各種設計模式--應用場景:
    裝飾器模式:
    1、類繼承會導致類的膨脹,這時候裝飾器就派上用場了
    責任鏈模式:
    1、ifelse 用責任鏈來實現
    狀態模式:
    1、ifelse
    適配器模式:目的是在原來代碼的基礎上面,增加一些修飾的東西。
    1、訂單信息,比如增加了活動了之后,返回結果中要包含活動信息,在原來代碼的基礎上面給返回的Bean里面增加一些活動信息。
    代理模式:
     比如吧,我有一個業務,同時要調用外部系統的http實現的接口和webservice實現的接口,可以做一個代理類, 代理webservice接口和http接口, 代理類幫我判斷該用哪個, 我直接調用代理類就行了。代理類專門屏蔽后面的接口或者協議。
    模板方法模式:
    1、比如訂單的下單還有退款操作,都需要同時判斷使用的金額和紅包。
    2、支付的時候,調用不同的支付方式,都需要去做判斷。
    策略模式:





    策略模式和裝飾器模式區別:
    策略模式偏向于對實現方法或策略的封裝,調用者不需要考慮具體實現,只要指定使用的策略即可。
    裝飾器模式一般用于需要對功能進行擴展的場合,每一種裝飾都是一種擴展或增強。

    看起來兩個模式好像沒有必然的聯系,但是在實際使用過程中,發現了一個讓我困惑的地方。
    先看一個典型的場景:
                商場對客戶打折,老客戶8折,新客戶9折,新客戶購物滿3000,打8.5折
    對這個基本場景,一般給的經典模式是策略模式,很多書也以這個作為策略模式的的經典案例。
    但是,如果我把每一種折扣看作是一種對原有價格的裝飾,這個場景也是可以用裝飾器模式實現的。
    兩個模式都需要花費一些代碼去判斷策略或裝飾器的類型,而且實現難度也旗鼓相當。

    我用兩種模式都實現了相同的功能,但是卻沒有發現明顯的區別,不知道大家對這兩個模式怎么看,
    歡迎討論。


    策略模式更傾向是N選1的模式,也即根據條件選擇相應的算法,但各種算法是互斥的,比如:團體客戶和個人客戶的優惠政策必然是非此即彼的;

    裝飾模式是在主體邏輯的基礎上的附加邏輯,比如,個人客戶有的屬于同城客戶,支持送貨上門。

    謝謝您的回復,如果按照策略模式,每一種打折方案是一種策略,而且只能選擇一個,這是沒有問題的。
    按照裝飾模式,每一種折扣都是在購買金額上的附加,在沒有折上折或者送貨上門這些附加值的時候,我感覺裝飾模式也是實用的,當然,當折上折和送貨這種附加體現的時候,裝飾起的模式就體現去來了。

    所以,我感覺在當前描述的問題中,這兩個模式應該都可以很恰當的實現需求,但是沒感覺到本質的區別。
    于是就有些困惑了,看了您的總結,我感覺自己有點鉆牛角了。
    如果這個場景新增附加需求,比如新增vip客戶,那么策略模式就比較合適了。
    但是如果進行折上折或者送貨上門這類附加需求,很明顯裝飾模式會更好一些了。
    看來具體的模式還得根據實際需求確定,不能死搬硬套。
    盡管樓主可以使用兩種模式實現自己說的場景,但是兩者還是有本質的區別。

    策略模式,已經說的很清楚, 就不多說了。

    裝飾模式是主題邏輯的基礎上的加強。可以看看JAVA IO的設計。
    就像樓上說的, 如果客戶購買滿5000, 不只可以享受7折優惠, 還可以送貨上門。
    這里有兩項功能: 1) 7折優惠, 2)送貨上門
    如果使用策略模式, 我們勢必把兩項功能都寫在一個策略的實現類里面。
    假使現在有新的場景出現,就是老客戶購買滿3000, 也享受送貨上門。(或者說這里面的還蘊藏一些其他的優惠,比如說返券等等)
    難道我們又把這些功能添加到我們的策略里面, 這樣代碼就很生硬而且不容易修改。

    但是使用裝飾模式就不一樣,裝飾模式能動態的給對象增加特有的功能。 比如說IO里面可以添加Buffer的功能。 同樣在我們的場景里面,我們也可以將送貨上門、返券等也動態的增強, new 送貨上門(new 返券())...., 這樣子就很靈活了。

    策略實現可能類似:
    do7折();
    do送貨上門();
    do返券()

    裝飾的實現可能了類似:
    new 7折( new 送貨上門(new 返券())), 能隨意組合;

    所有的優惠都享受上了, 看上去還是爽一點。 

    其實裝飾模式, 還是更符合設計的一條原則: 少繼承, 多組合 
    posted on 2015-05-08 17:32 abin 閱讀(493) 評論(0)  編輯  收藏 所屬分類: PatternDesigns
    主站蜘蛛池模板: 亚洲欧洲日产国码av系列天堂| jzzijzzij在线观看亚洲熟妇| 国产精品国产亚洲区艳妇糸列短篇| 国产一级一片免费播放i| 美女视频黄免费亚洲| 95免费观看体验区视频| 亚洲热线99精品视频| 美女视频黄免费亚洲| 激情综合亚洲色婷婷五月APP| 91制片厂制作传媒免费版樱花 | 久久亚洲日韩精品一区二区三区| 全黄A免费一级毛片| 亚洲第一区精品观看| 一级毛片免费不卡| 亚洲日韩欧洲无码av夜夜摸| 免费观看的毛片大全| 国产特黄一级一片免费| 国产精品亚洲一区二区三区在线| 麻豆精品不卡国产免费看| 久久精品视频亚洲| 91av在线免费视频| 特级毛片aaaa免费观看| 亚洲成AV人在线观看天堂无码| 免费A级毛片无码A∨中文字幕下载| 亚洲综合男人的天堂色婷婷| 男女做羞羞的事视频免费观看无遮挡 | 永久在线免费观看| 99久久国产亚洲综合精品| 亚洲高清国产拍精品26U| 国产免费私拍一区二区三区| 在免费jizzjizz在线播| 中文字幕乱理片免费完整的| 亚洲AV人人澡人人爽人人夜夜| 国产成人免费网站| 老司机精品视频免费| 亚洲AV无码专区国产乱码4SE| 四虎影视永久免费观看网址 | 卡一卡二卡三在线入口免费| 日韩精品亚洲专区在线影视| 亚洲婷婷天堂在线综合| 亚洲第一区在线观看|