結構模式-Adapter適配器模式

          一:使用場景

               1)使用的地方:我想使用兩個不同類的方法,這個時候你需要把它們組合起來使用

               2)目前使用的情況:我會把兩個類用戶組合的方式放到一起,編程思想think in java里已經提到個,能盡量用組合就用組合,繼承一般考慮再后。

               3)使用后的好處:你不需要改動以前的代碼,只是新封裝了一新類,由這個類來提供兩個類的方法,這個時候:一定會想到facade外觀模式,本來是多個類使用的情況,我新封裝成一個類來使用,而這個類我采用組合的方式來包裝新的方法。我的理解是,設計模式本身就是為了幫助解決特定的業務場景而故意把模式劃分對應的模式類別,其實大多數情況,都解決了同樣的問題,這個時候其實沒有必要過多的糾纏到模式的名字上了,你有好的注意,你甚至取一個新的名字來概括這樣的使用場景。

              4)使用的壞處:適配器模式,有兩種方式來實現。一個是組合一個是繼承,我覺得,首先應該考慮組合,能用組合就不要用繼承,這是第一個。第二個,你采用繼承來實現,那肯定會加大繼承樹結構,如果你的繼承關系本身就很復雜了,這肯定會加大繼承關系的維護,不有利于代碼的理解,或則更加繁瑣。繼承是為了解決重用的為題而出現的,所以我覺得不應該濫用繼承,有機會可以考慮同樣別的方案。

          二:一個實際的例子

                關聯營銷的例子,用戶購買完商品后,我又推薦他相關別的商品

                由于減少代碼,方法我都不采用接口,直接由類來提供,代碼只是一個范例而已,都精簡了。

          1)創建訂單信息

          public class Order {
          private Long orderId;
          private String nickName;

          public Order(Long orderId,String nickName){
             this.orderId=orderId;
             this.nickName=nickName;
          }

          /**
          * 用戶下訂單
          */
          public void insertOrder(){
            
          }
          }

          2)商品信息

          public class Auction {
          /**商品名稱*/
          private String name;

          /**制造商*/
          private String company;

          /**制造日期*/
          private Date date;


          public Auction(String name,String company, Date date){
             this.name=name;
             this.company=company;
             this.date=date;
          }

          /**
          * 推廣的商品列表
          */
          public void commendAuction(){
            
          }

          }

          3)購物

          public class Trade {
          /**用戶訂單*/
          private Order order;

          /**商品信息*/
          private Auction auction;

          public Trade(Order order ,Auction auction){
             this.order=order;
             this.auction=auction;
          }

          /**
          * 用戶產生訂單以及后續的事情
          */
          public void trade(){
             /**下訂單*/
             order.insertOrder();
            
             /**關聯推薦相關的商品*/
             auction.commendAuction();
          }

          }

             4)使用心得:其實外面采用了很多繼承的方式,order繼承auction之后,利用super .inserOrder()再加一個auction.recommendAuction(),實際上大同小異,我到覺得采用組合更容易理解以及代碼更加優美點。

          posted on 2012-08-06 17:38 陳睿 閱讀(265) 評論(0)  編輯  收藏 所屬分類: 設計模式

          導航

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玉屏| 垣曲县| 察雅县| 西华县| 巢湖市| 双鸭山市| 高清| 彭泽县| 石渠县| 神池县| 合肥市| 通榆县| 全州县| 乐至县| 手游| 洪洞县| 红桥区| 和顺县| 南康市| 汪清县| 泰来县| 吴堡县| 潜江市| 平利县| 成武县| 怀集县| 华安县| 赞皇县| 榕江县| 宜春市| 镇坪县| 远安县| 陈巴尔虎旗| 孝昌县| 中宁县| 上栗县| 泸水县| 玉门市| 开封市| 嘉鱼县| 昂仁县|