日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java設(shè)計模式之Composite(組合)

瀏覽:29日期:2024-06-26 11:35:14

內(nèi)容: Composite定義:將對象以樹形結(jié)構(gòu)組織起來,以達成“部分-整體 的層次結(jié)構(gòu),使得客戶端對單個對象和組合對象的使用具有一致性.Composite比較容易理解,想到Composite就應(yīng)該想到樹形結(jié)構(gòu)圖。組合體內(nèi)這些對象都有共同接口,當組合體一個對象的方法被調(diào)用執(zhí)行時,Composite將遍歷(Iterator)整個樹形結(jié)構(gòu),尋找同樣包含這個方法的對象并實現(xiàn)調(diào)用執(zhí)行。可以用牽一動百來形容。所以Composite模式使用到Iterator模式,和Chain of Responsibility模式類似。Composite好處:1.使客戶端調(diào)用簡單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個對象,用戶就不必關(guān)系自己處理的是單個對象還是整個組合結(jié)構(gòu),這就簡化了客戶端代碼。2.更容易在組合體內(nèi)加入對象部件. 客戶端不必因為加入了新的對象部件而更改代碼。如何使用Composite?首先定義一個接口或抽象類,這是設(shè)計模式通用方式了,其他設(shè)計模式對接口內(nèi)部定義限制不多,Composite卻有個規(guī)定,那就是要在接口內(nèi)部定義一個用于訪問和管理Composite組合體的對象們(或稱部件Component).下面的代碼是以抽象類定義,一般盡量用接口interface,;

public abstract class Equipment{private String name; //實價public abstract double netPrice();//折扣價格public abstract double discountPrice();//增加部件方法public boolean add(Equipment equipment) { return false; }//刪除部件方法public boolean remove(Equipment equipment) { return false; }//注意這里,這里就提供一種用于訪問組合體類的部件方法。public Iterator iter() { return null; }public Equipment(final String name) { this.name=name; }}

抽象類Equipment就是Component定義,代表著組合體類的對象們,Equipment中定義幾個共同的方法。;

public class Disk extends Equipment{public Disk(String name) { super(name); }//定義Disk實價為1public double netPrice() { return 1.; }//定義了disk折扣價格是0.5 對折。public double discountPrice() { return .5; }}

Disk是組合體內(nèi)的一個對象,或稱一個部件,這個部件是個單獨元素( Primitive)。還有一種可能是,一個部件也是一個組合體,就是說這個部件下面還有'兒子',這是樹形結(jié)構(gòu)中通常的情況,應(yīng)該比較容易理解。現(xiàn)在我們先要定義這個組合體:;

abstract class CompositeEquipment extends Equipment{private int i=0; //定義一個Vector 用來存放'兒子'private Lsit equipment=new ArrayList();public CompositeEquipment(String name) { super(name); }public boolean add(Equipment equipment) { this.equipment.add(equipment); return true; }public double netPrice() {double netPrice=0.;Iterator iter=equipment.iterator();for(iter.hasNext())netPrice+=((Equipment)iter.next()).netPrice();return netPrice;}public double discountPrice() {double discountPrice=0.;Iterator iter=equipment.iterator();for(iter.hasNext())discountPrice+=((Equipment)iter.next()).discountPrice();return discountPrice;}//注意這里,這里就提供用于訪問自己組合體內(nèi)的部件方法。//上面dIsk 之所以沒有,是因為Disk是個單獨(Primitive)的元素.public Iterator iter(){return equipment.iterator() ;{//重載Iterator方法 public boolean hasNext() { return i//重載Iterator方法 public Object next() {if(hasNext()) return equipment.elementAt(i++);else   throw new NoSuchElementException(); }}

上面CompositeEquipment繼承了Equipment,同時為自己里面的對象們提供了外部訪問的方法,重載了Iterator,Iterator是Java的Collection的一個接口,是Iterator模式的實現(xiàn).我們再看看CompositeEquipment的兩個具體類:盤盒Chassis和箱子Cabinet,箱子里面可以放很多東西,如底板,電源盒,硬盤盒等;盤盒里面可以放一些小設(shè)備,如硬盤 軟驅(qū)等。無疑這兩個都是屬于組合體性質(zhì)的。;

public class Chassis extends CompositeEquipment{ public Chassis(String name) { super(name); } public double netPrice() { return 1.+super.netPrice(); } public double discountPrice() { return .5+super.discountPrice(); }} public class Cabinet extends CompositeEquipment{ public Cabinet(String name) { super(name); } public double netPrice() { return 1.+super.netPrice(); } public double discountPrice() { return .5+super.discountPrice(); }}

至此我們完成了整個Composite模式的架構(gòu)。我們可以看看客戶端調(diào)用Composote代碼:Cabinet cabinet=new Cabinet("Tower");Chassis chassis=new Chassis("PC Chassis");//將PC Chassis裝到Tower中 (將盤盒裝到箱子里)cabinet.add(chassis);//將一個10GB的硬盤裝到 PC Chassis (將硬盤裝到盤盒里)chassis.add(new Disk("10 GB"));//調(diào)用 netPrice()方法;System.out.println("netPrice="+cabinet.netPrice());System.out.println("discountPrice="+cabinet.discountPrice());上面調(diào)用的方法netPrice()或discountPrice(),實際上Composite使用Iterator遍歷了整個樹形結(jié)構(gòu),尋找同樣包含這個方法的對象并實現(xiàn)調(diào)用執(zhí)行.Composite是個很巧妙體現(xiàn)智慧的模式,在實際應(yīng)用中,如果碰到樹形結(jié)構(gòu),我們就可以嘗試是否可以使用這個模式。以論壇為例,一個版(forum)中有很多帖子(message),這些帖子有原始貼,有對原始貼的回應(yīng)貼,是個典型的樹形結(jié)構(gòu),那么當然可以使用Composite模式,那么我們進入Jive中看看,是如何實現(xiàn)的.Jive解剖在Jive中 ForumThread是ForumMessages的容器container(組合體).也就是說,F(xiàn)orumThread類似我們上例中的 CompositeEquipment.它和messages的關(guān)系如圖:[thread] |- [message] |- [message] |- [message] |- [message] |- [message] 我們在ForumThread看到如下代碼:;

public interface ForumThread { .... public void addMessage(ForumMessage parentMessage, ForumMessage newMessage) throws UnauthorizedException; public void deleteMessage(ForumMessage message) throws UnauthorizedException; public Iterator messages(); .... }

類似CompositeEquipment, 提供用于訪問自己組合體內(nèi)的部件方法: 增加 刪除 遍歷.結(jié)合我的其他模式中對Jive的分析,我們已經(jīng)基本大體理解了Jive論壇體系的框架,如果你之前不理解設(shè)計模式,而直接去看Jive源代碼,你肯定無法看懂。:)Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品九九| 日本免费一区二区视频| 亚洲三级精品| 91精品高清| 蜜桃成人av| 亚洲精品电影| 夜夜嗨一区二区| 麻豆精品网站| 一区二区国产在线观看| 亚洲麻豆一区| 91成人小视频| 久久99久久人婷婷精品综合| 麻豆精品一区二区综合av| 欧美黄色一区二区| 麻豆国产91在线播放| 精品久久久久久久| 欧美丰满日韩| 午夜精品久久久久久久久久蜜桃| 中文字幕在线免费观看视频| 亚洲三级网址| 在线视频精品| av资源新版天堂在线| 99视频在线精品国自产拍免费观看| 国产福利一区二区精品秒拍 | 91精品国产福利在线观看麻豆| 深夜日韩欧美| 伊人久久亚洲影院| 97精品一区二区| 久久不见久久见免费视频7| 久久女人天堂| 99在线|亚洲一区二区| 欧美日韩四区| 亚洲欧洲美洲国产香蕉| 亚洲精品九九| 欧美伊人影院| 日韩一区二区三区精品视频第3页| 亚洲黄色影院| 综合日韩av| 欧美影院视频| 水蜜桃久久夜色精品一区的特点| 久久国产中文字幕| 丝袜亚洲另类欧美| 日韩精品首页| 日韩成人精品一区二区三区| 欧美日韩精品免费观看视频完整| 蜜桃久久av| 在线视频日韩| 久久在线91| 亚洲福利免费| 亚洲手机在线| 国产高清日韩| 在线看片国产福利你懂的| 宅男噜噜噜66国产日韩在线观看| 亚洲aa在线| 日本午夜精品久久久| 日韩电影免费网站| 亚洲精品乱码日韩| 亚洲午夜精品久久久久久app| 99久精品视频在线观看视频| 色乱码一区二区三区网站| 成人免费一区| 99久久夜色精品国产亚洲1000部| 国产精品欧美在线观看| 国产在视频一区二区三区吞精| 亚洲福利精品| 久久国产主播| 国产精品99精品一区二区三区∴ | 日韩欧美另类中文字幕| 国产极品嫩模在线观看91精品| 女同性一区二区三区人了人一| 国产美女撒尿一区二区| 中文字幕成在线观看| 国产精久久久| 视频一区二区不卡| 欧美成人aaa| 欧美特黄一区| 蜜桃一区二区三区在线观看| 精品国产三区在线| 热久久免费视频| 视频二区不卡| 国产精品欧美大片| 久久国产高清| 麻豆精品蜜桃| 国产精品第十页| 午夜一区在线| 精品99在线| 四虎成人精品一区二区免费网站| 91精品国产调教在线观看| 国产精品久久777777毛茸茸| 午夜宅男久久久| 欧产日产国产精品视频| 国产精品一页| 在线观看亚洲精品福利片| 成人久久一区| 精品香蕉视频| 欧美日韩18| 视频在线在亚洲| 欧美91视频| 日本黄色精品| 欧美国产专区| 日本久久二区| 老鸭窝毛片一区二区三区| 日韩久久精品网| 欧美片第1页综合| 亚洲欧美在线综合| 亚洲一区黄色| 婷婷中文字幕一区| 麻豆视频在线看| 精品一区二区三区中文字幕 | 欧美综合精品| 日韩中文字幕亚洲一区二区va在线| 色综合www| 岛国av在线播放| 久久中文精品| 国产乱论精品| 中文字幕日韩高清在线| 香蕉久久夜色精品国产| 亚洲五月婷婷| 久久麻豆精品| 欧美日韩在线播放视频| 国产日韩电影| 国产精品专区免费| 伊人久久av| 在线中文字幕播放| 日韩免费视频| 亚洲三级欧美| 日韩高清不卡| 久久久久一区| 亚洲精品一区三区三区在线观看| 国产99在线| 福利精品一区| 日产午夜精品一线二线三线| 加勒比视频一区| 中文在线中文资源| 丝袜美腿诱惑一区二区三区| 亚洲四虎影院| 五月婷婷六月综合| 日韩午夜一区| 中文字幕中文字幕精品| 日韩精品国产欧美| 国产日韩欧美一区在线| 国产精品草草| 成人在线丰满少妇av| 欧美成人基地| 久久国产电影| 日韩亚洲精品在线| 亚洲精品黄色| 国产精品亚洲综合久久| 精品免费视频| 久久精品99久久无色码中文字幕| 亚洲国产日韩欧美在线| 久久亚洲视频| 日韩国产欧美三级| 精品亚洲a∨一区二区三区18| 婷婷综合六月| 视频一区在线播放| 久久精品99国产精品日本| 嫩草伊人久久精品少妇av杨幂| 视频在线不卡免费观看| 日韩不卡在线| 美日韩精品视频| 国产精品二区影院| 久久激情一区| 日韩影院在线观看| 国产精品亚洲人成在99www| 久久一区国产| 日韩欧美少妇| 久久国产88| 国产精品久久久久久久久久妞妞 | 国产一区清纯| 日韩影片在线观看| 国内揄拍国内精品久久| 国产在线成人| 日韩av资源网| 鲁鲁在线中文| 日韩精品一卡二卡三卡四卡无卡 | 午夜性色一区二区三区免费视频| 国产精品蜜月aⅴ在线| 中文字幕系列一区| 亚洲免费资源| 国产精品久久久久久久久妇女| 99国产精品99久久久久久粉嫩| 日韩精品久久理论片| 日韩国产欧美| 日韩中文字幕视频网| 97精品中文字幕| 亚洲精品九九| 欧美aa在线观看| 91九色综合| 99tv成人| 国产精品日本一区二区不卡视频| 亚洲二区精品| 久久av日韩| 香蕉久久久久久久av网站| 国内自拍视频一区二区三区| 丝袜美腿高跟呻吟高潮一区| 久久毛片亚洲| 亚洲v天堂v手机在线| 免费看av不卡| 欧美日韩一区二区三区四区在线观看|