Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1285262
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: 项目管理

2013-07-25 09:57:43

组合模式是结构型设计模式中使用频率非常高的模式之一。 通常它将一个对象包装成树型结构,以表示“整体”与“部分”的层次结构,从用户的角度来看,单个对象与组合对象,看起来,具有一致的接口。

适用性描述:

  1. 你想描述的对象,具有部分-整体的层次结构
  2. 用户希望能忽略组合对象与单个对象的不同,用户将统一的使用的使用组合结构中的所有对象

参与者描述:


    1.Component
      为组合中的对象声明接口。
      在适当的情况下,实现所有类共有接口的缺省行为。
      声明一个接口用于访问和管理Component的子组件。
      (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。

    2.Leaf
      在组合中表示叶节点对象,叶节点没有子节点。
      在组合中定义节点对象的行为。

    3.Composite
      定义有子部件的那些部件的行为。
      存储子部件。
      在Component接口中实现与子部件有关的操作。

    4.Client
      通过Component接口操纵组合部件的对象。


示例:


  1. package com.sql9.structured;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. //字符片段  
  7. abstract class Piece {  
  8.     // 统计字数  
  9.     public abstract int count();  
  10.       
  11.     public abstract void add(Piece p);  
  12.     public abstract void remove(Piece p);  
  13.       
  14.     protected List pieces;   
  15.       
  16.     public List getPieces() {  
  17.     return pieces;  
  18.     }  
  19.       
  20. }  
  21.   
  22. class Sentence extends Piece {  
  23.     String word;  
  24.     public Sentence(String word) {  
  25.     this.word = word;  
  26.     pieces = null;  
  27.     }  
  28.       
  29.     public int count() {  
  30.     return word == null ? 0 : word.length();  
  31.     }  
  32.       
  33.     public void add(Piece p) {  
  34.       
  35.     }  
  36.       
  37.     public void remove(Piece p) {  
  38.       
  39.     }  
  40. }  
  41.   
  42. class Paragraph extends Piece {  
  43.     public Paragraph() {  
  44.     pieces = new ArrayList();  
  45.     }  
  46.     public int count() {  
  47.     int count = 0;  
  48.     for (Piece p: pieces) {  
  49.         count += p.count();  
  50.     }  
  51.     return count;  
  52.     }  
  53.       
  54.     public void add(Piece p) {  
  55.     pieces.add(p);  
  56.     }  
  57.       
  58.     public void remove(Piece p) {  
  59.     pieces.remove(p);  
  60.     }  
  61. }  
  62.   
  63. public class CompositeTest {  
  64.   
  65.     public static void main(String[] args) {  
  66.   
  67.     Piece child = new Sentence("abcde");  
  68.     Piece child2 = new Sentence("123");  
  69.     Piece child3 = new Sentence("456789");  
  70.     Piece para = new Paragraph();  
  71.     Piece para2 = new Paragraph();  
  72.     para.add(child);  
  73.     para.add(child2);  
  74.     para2.add(child3);  
  75.     para2.add(para);  
  76.       
  77.     int count = para2.count();  
  78.     System.out.println("count of para2 = " + count);  
  79.     }  
  80.   
  81. }  

结果:


count of para2 = 14

阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~