电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java設計模式之Composite(組合)

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

內容: Composite定義:將對象以樹形結構組織起來,以達成“部分-整體 的層次結構,使得客戶端對單個對象和組合對象的使用具有一致性.Composite比較容易理解,想到Composite就應該想到樹形結構圖。組合體內這些對象都有共同接口,當組合體一個對象的方法被調用執行時,Composite將遍歷(Iterator)整個樹形結構,尋找同樣包含這個方法的對象并實現調用執行。可以用牽一動百來形容。所以Composite模式使用到Iterator模式,和Chain of Responsibility模式類似。Composite好處:1.使客戶端調用簡單,客戶端可以一致的使用組合結構或其中單個對象,用戶就不必關系自己處理的是單個對象還是整個組合結構,這就簡化了客戶端代碼。2.更容易在組合體內加入對象部件. 客戶端不必因為加入了新的對象部件而更改代碼。如何使用Composite?首先定義一個接口或抽象類,這是設計模式通用方式了,其他設計模式對接口內部定義限制不多,Composite卻有個規定,那就是要在接口內部定義一個用于訪問和管理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是組合體內的一個對象,或稱一個部件,這個部件是個單獨元素( Primitive)。還有一種可能是,一個部件也是一個組合體,就是說這個部件下面還有'兒子',這是樹形結構中通常的情況,應該比較容易理解。現在我們先要定義這個組合體:;

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;}//注意這里,這里就提供用于訪問自己組合體內的部件方法。//上面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模式的實現.我們再看看CompositeEquipment的兩個具體類:盤盒Chassis和箱子Cabinet,箱子里面可以放很多東西,如底板,電源盒,硬盤盒等;盤盒里面可以放一些小設備,如硬盤 軟驅等。無疑這兩個都是屬于組合體性質的。;

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模式的架構。我們可以看看客戶端調用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"));//調用 netPrice()方法;System.out.println("netPrice="+cabinet.netPrice());System.out.println("discountPrice="+cabinet.discountPrice());上面調用的方法netPrice()或discountPrice(),實際上Composite使用Iterator遍歷了整個樹形結構,尋找同樣包含這個方法的對象并實現調用執行.Composite是個很巧妙體現智慧的模式,在實際應用中,如果碰到樹形結構,我們就可以嘗試是否可以使用這個模式。以論壇為例,一個版(forum)中有很多帖子(message),這些帖子有原始貼,有對原始貼的回應貼,是個典型的樹形結構,那么當然可以使用Composite模式,那么我們進入Jive中看看,是如何實現的.Jive解剖在Jive中 ForumThread是ForumMessages的容器container(組合體).也就是說,ForumThread類似我們上例中的 CompositeEquipment.它和messages的關系如圖:[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, 提供用于訪問自己組合體內的部件方法: 增加 刪除 遍歷.結合我的其他模式中對Jive的分析,我們已經基本大體理解了Jive論壇體系的框架,如果你之前不理解設計模式,而直接去看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
相關文章:
主站蜘蛛池模板: 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 船老大板材_浙江船老大全屋定制_船老大官网 | Duoguan 夺冠集团| 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 超声波反应釜【百科】-以马内利仪器| 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 耐磨陶瓷管道_除渣器厂家-淄博浩瀚陶瓷科技有限公司 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 制冷采购电子商务平台——制冷大市场| 学习安徽网| 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 发电机组|柴油发电机组-批发,上柴,玉柴,潍柴,康明斯柴油发电机厂家直销 | ZHZ8耐压测试仪-上海胜绪电气有限公司| 塑钢课桌椅、学生课桌椅、课桌椅厂家-学仕教育设备首页 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 粘度计维修,在线粘度计,二手博勒飞粘度计维修|收购-天津市祥睿科技有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 上海佳武自动化科技有限公司 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 |