亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在組合模式中實現訪問者(Visitor)模式

2019-11-18 12:16:11
字體:
來源:轉載
供稿:網友

   本文從一個給定的實現了組合(Composite)模式的例子開始,說明怎么在這個數據結構上實現業務邏輯代碼。依次介紹了非面向對象的方式、在組合結構中加入方法、使用訪問者(Visitor)模式以及用改進后的訪問者(Visitor)模式來實現相同的業務邏輯代碼,并且對于每種實現分別給出了優缺點。

  讀者定位于具有java程序開發和設計模式經驗的開發人員。

  讀者通過本文可以學到如何在組合(Composite)模式中實現各種不同的業務方法及其優缺點。

  組合(Composite)模式

  組合模式是結構型模式中的一種。GOF的《設計模式》一書中對使用組合模式的意圖描述如下:將對象組合成樹形結構以表示"部分-整體"的層次結構。Composite使得用戶對單個對象和組合對象的使用具有一致性。

  組合模式應用廣泛。根據GOF中對組合模式的定義,Composite模式一般由Component接口、Leaf類和Composite類組成。現在需要對一個軟件產品治理系統的實體建模:某公司開發了一系列軟件集(SoftwareSet),包含了多種品牌(Brand)的軟件產品,就象IBM提供了Lotus、WebsPhere等品牌。每個品牌下面又有各種產品(PRodUCt),如IBM的Lotus下面有Domino Server/Client產品等。建模后的類圖如下(代碼可以參見隨本文帶的附件中,包com.test.entity下所有的源文件):

在組合模式中實現訪問者(Visitor)模式(圖一)


  如圖所示:

 ?。?)接口SoftwareComponent就是對應于組合模式中的Component接口,它定義了所有類共有接口的缺省行為

  (2)AbsSoftwareComposite類對應于Composite類,并且是抽象類,所有可以包含子節點的類都擴展這個類。這個類的主要功能是用來存儲子部件,實現了接口中的方法,部分可以重用的代碼寫在此類中

 ?。?)SoftwareSet類繼續于AbsSoftwareComposite類,對應于軟件集,軟件集下直接可以包含品牌(Brand),也可以直接包含不屬于任何品牌的產品(Product)

 ?。?)Brand類繼續于AbsSoftwareComposite類,對應于品牌,包含了品牌名屬性,并且用來存儲Product類的實例

 ?。?)Product類就是對應的Leaf類,表示葉子節點,葉子節點沒有子節點

  用不同的方法實現業務邏輯

  數據結構建立好之后,需要在這個數據結構上添加方法實現業務邏輯。比如現在的這個例子中,有這樣的需求:給定一些用戶選擇好的產品,需要計算出這些選中后軟件的總價格。下面開始介紹如何使用各種不同的方法來實現這個業務邏輯。

  非面向對象的編程方式

  這種方式下,編程思路最簡單:遍歷SoftwareSet實例中的所有節點,假如遍歷到的當前對象是Product的話就累加,否則繼續遍歷下一層直到全部遍歷完畢。代碼片斷如下:

  1. /**
  2.  * 取得某個SoftwareComponent對象下面所有Product的價格
  3.  * @param brand
  4.  * @return
  5.  */
  6. public double getTotalPrice(SoftwareComponent softwareComponent) {
  7.     SoftwareComponent temp = softwareComponent;
  8.     double totalPrice = 0;
  9.     //假如傳入的實例是SoftwareSet的類型
  10.     if (temp instanceof SoftwareSet) {
  11.         Iterator it = ((SoftwareSet) softwareComponent).getChilds()
  12.                 .iterator();
  13.         while (it.hasNext()) {//遍歷
  14.             temp = (SoftwareComponent) it.next();
  15.             //假如子對象是Product類型的,直接累加
  16.             if (temp instanceof Product) {
  17.                 Product product = (Product) temp;
  18.                 totalPrice += product.getPrice();
  19.             } else if (temp instanceof Brand) { 
  20.             //假如子對象是Brand類型的,則遍歷Brand下面所有的產品并累加
  21.                 Brand brand = (Brand) temp;
  22.                 totalPrice += getBrandPrice(brand);
  23.             }
  24.         }
  25.     } else if (temp instanceof Brand) {
  26.         //假如傳入的實例是SoftwareSet的類型,則遍歷Brand下面所有的產品并累加
  27.         totalPrice += getBrandPrice((Brand) temp);
  28.     } else if (temp instanceof Product) {
  29.         //假如子對象是Product類型的,直接返回價格
  30.         return ((Product) temp).getPrice();
  31.     }
  32.     return totalPrice;
  33. }
  34. /**
  35.  * 取得某個Brand對象下面所有Product的價格
  36.  * @param brand
  37.  * @return
  38.  */
  39. private double getBrandPrice(Brand brand) {
  40.     Iterator brandIt = brand.getChilds().iterator();
  41.     double totalPrice = 0;
  42.     while (brandIt.hasNext()) {
  43.         Product product = (Product) brandIt.next();
  44.         totalPrice += product.getPrice();
  45.     }
  46.     return totalPrice;
  47. }



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜丰满在线18影院| 91sao在线观看国产| 日韩电影免费在线观看| 国产精品免费在线免费| 狠狠躁夜夜躁人人爽超碰91| 日韩一级裸体免费视频| 国产精品情侣自拍| 国产69精品久久久久9| 日本精品久久电影| 国产欧美日韩丝袜精品一区| 亚洲男人天堂2024| 亚洲精品之草原avav久久| 日韩av片电影专区| 久久久久久久久久久免费精品| 欧美黑人一区二区三区| 色与欲影视天天看综合网| 国产欧美精品日韩| 久久久这里只有精品视频| 日韩**中文字幕毛片| 久久精品中文字幕电影| 欧美理论片在线观看| 精品视频久久久久久久| 国产成人精品综合久久久| 日韩在线视频线视频免费网站| 成人久久精品视频| 亚洲一区二区三区香蕉| 久久亚洲精品一区二区| 庆余年2免费日韩剧观看大牛| 日韩精品久久久久久久玫瑰园| 欧美一区二区三区免费视| 成人免费高清完整版在线观看| 色综合久久天天综线观看| 欧洲亚洲在线视频| 欧美日韩国产综合视频在线观看中文| 亚洲精品女av网站| 国产精品久久久久7777婷婷| 尤物九九久久国产精品的分类| 精品人伦一区二区三区蜜桃网站| 国产精品丝袜久久久久久不卡| 国产精品视频999| 91成人国产在线观看| 亚洲午夜精品久久久久久久久久久久| 欧美色视频日本高清在线观看| 欧美大片欧美激情性色a∨久久| 97超碰国产精品女人人人爽| 在线亚洲午夜片av大片| 亚洲区中文字幕| 91中文精品字幕在线视频| 亚洲国产美女精品久久久久∴| 日本高清久久天堂| 欧美激情免费观看| 国产精品久久久久久久电影| 国产99久久精品一区二区永久免费| 欧美成年人视频| 亚洲高清福利视频| 亚洲成人1234| 国产精品视频久久久久| 国产精品午夜国产小视频| 亚洲乱码国产乱码精品精| 国产日产久久高清欧美一区| 久久伊人精品视频| 亚洲高清一二三区| 成人激情av在线| 成人精品在线观看| 亚洲最新中文字幕| 久久久久久97| 亚洲精品有码在线| 欧美一级视频免费在线观看| 久久精品久久久久久国产 免费| 精品成人69xx.xyz| 日韩欧美极品在线观看| 欧美大片在线看| 亚洲国产成人久久综合一区| 在线观看日韩欧美| zzijzzij亚洲日本成熟少妇| 色悠久久久久综合先锋影音下载| 日韩免费观看av| 亚洲成人aaa| 亚洲国产精品成人一区二区| 久久久精品国产亚洲| 91久久久久久国产精品| 国内外成人免费激情在线视频| 夜色77av精品影院| 亚洲国模精品一区| 国产丝袜高跟一区| 国产亚洲欧美日韩美女| 欧美极品欧美精品欧美视频| 亚洲国产成人在线视频| 91精品综合视频| 国产成人精品久久二区二区| 欧美理论片在线观看| 欧美在线免费看| 国内精品在线一区| 亚洲二区在线播放视频| 午夜精品久久久久久久99黑人| 日韩欧美国产中文字幕| 1769国内精品视频在线播放| 国产成人鲁鲁免费视频a| 成人深夜直播免费观看| 亚洲精品456在线播放狼人| 97在线视频免费播放| 91精品国产色综合久久不卡98口| 91超碰中文字幕久久精品| 97精品伊人久久久大香线蕉| 日韩va亚洲va欧洲va国产| 欧美日韩亚洲激情| 91亚洲精品视频| 狠狠色香婷婷久久亚洲精品| 欧美丰满老妇厨房牲生活| 欧美天天综合色影久久精品| 亚洲图片制服诱惑| 日韩中文字幕视频| 成人性生交xxxxx网站| 亚洲人成电影网站| 日产精品99久久久久久| 欧美超级乱淫片喷水| 91影院在线免费观看视频| 国产精品自拍网| 亚洲国产一区自拍| 亚洲免费伊人电影在线观看av| 69av视频在线播放| 亚洲成人精品久久| 国产成人精品久久亚洲高清不卡| 亚洲国产精品资源| 中文字幕av一区| 91福利视频网| 欧美激情精品久久久久久变态| 最新中文字幕亚洲| 国产91精品最新在线播放| 亚洲欧美三级在线| 国产日韩在线看| 国产精品久久久久久久久久免费| 欧美专区第一页| 一区二区三区日韩在线| 亚洲最新在线视频| 久久久久女教师免费一区| 久久视频免费观看| 亚洲偷熟乱区亚洲香蕉av| 国产精品视频999| 日韩大陆欧美高清视频区| 亚洲日本中文字幕| 国产97在线|亚洲| 91老司机精品视频| 日韩av电影在线网| 欧美日韩亚洲精品内裤| 国产精品视频26uuu| 成人黄色短视频在线观看| 欧美激情xxxx性bbbb| 成人有码视频在线播放| 欧美在线激情网| 亚洲欧美中文日韩在线| 亚洲电影免费观看高清完整版在线观看| 亚洲小视频在线| 97免费视频在线| 欧美体内谢she精2性欧美| 91亚洲精品久久久| 久久久久久久999| 欧美日韩国产色视频| 亚洲变态欧美另类捆绑| 亚洲欧美一区二区三区情侣bbw| 亚洲成年人影院在线| 日韩精品免费视频| 福利一区福利二区微拍刺激| 成人激情视频在线观看|