科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Composite模式及其在JSF中的应用

Composite模式及其在JSF中的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

1.composite模式意在组成任意复杂度的整体--部分组件层次结构,同时将单个组件或复合组件视为统一的接口。树形组织结构就是其中一种表现形式。

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
Disk是组合体内的一个对象,或称一个部件,这个部件是个单独元素( Primitive)。
Disk.java:
  1. package implEquip;
  2. import com.interf.Equipment;
  3. public class Disk extends Equipment {
  4.     public Disk(String name) {
  5.         super(name);
  6.         // TODO Auto-generated constructor stub
  7.     }
  8.     
  9.     //定义Disk实价为1
  10.     public double netPrice() {
  11.         return 1.; 
  12.     }
  13.     //定义了disk折扣价格是0.5 对折。
  14.     public double discountPrice() { 
  15.         return .5; 
  16.     }    
  17. }
还有一种可能是,一个部件也是一个组合体,就是说这个部件下面还有'儿子',这是树形结构中通常的情况,应该比较容易理解。现在我们先要定义这个组合体:
CompsiteEquipment.java:
  1. package implEquip;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.NoSuchElementException;
  6. import com.interf.Equipment;
  7. public class CompositeEquipment extends Equipment {
  8.     
  9.     private int i=0; 
  10. //    定义一个Vector 用来存放'儿子'
  11.     private List equipment = new ArrayList();
  12.     
  13.     public CompositeEquipment(String name) {
  14.         super(name);
  15.         // TODO Auto-generated constructor stub
  16.     }
  17.     public boolean add(Equipment equipment) { 
  18.         this.equipment.add(equipment); 
  19.         return true
  20.     }
  21.     public double netPrice() {
  22.         double netPrice=0.;
  23.         Iterator iter=equipment.iterator();
  24.         while(iter.hasNext())
  25.           netPrice+=((Equipment)iter.next()).netPrice();
  26.         return netPrice;
  27.     }
  28.     public double discountPrice() {
  29.         double discountPrice=0.;
  30.         Iterator iter=equipment.iterator();
  31.         while(iter.hasNext())
  32.           discountPrice+=((Equipment)iter.next()).discountPrice();
  33.         return discountPrice;
  34.     }
  35. //    注意这里,这里就提供用于访问自己组合体内的部件方法。
  36. //    上面dIsk 之所以没有,是因为Disk是个单独(Primitive)的元素.
  37.     public Iterator iter() {
  38.         return equipment.iterator() ;
  39.     }
  40. //    重载Iterator方法
  41.     public boolean hasNext() { return i<equipment.size(); }
  42. //    重载Iterator方法
  43.     public Object next(){
  44.     if(hasNext())
  45.         return equipment.get(i++);
  46.     else 
  47.         throw new NoSuchElementException();
  48.     }
  49. }


    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章