Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 《设计模式》学习笔记--组合模式Composite
【标  题】:《设计模式》学习笔记--组合模式Composite
【关键字】:--,Composite
【来  源】:http://blog.csdn.net/qinysong/archive/2006/08/14/1060332.aspx

《设计模式》学习笔记--组合模式Composite

Your Ad Here

   

在总结这个模式的时候,发现很难找到一个系统低层的非常恰当的实例,能够完全表现出该模式的所有价值,所以这一节把主题作了一个改变。
 
1、核心意图:
    将对象组合成树形结构以表示部分-整体的层次结构,Composite模式使用户对单个对象和组合对象的使用具有一致性。
该模式的目标是抽象用户和组件之间的联系,使用户可以一致的使用各种类型的组件,包括原子组件和组合组件,从而避免在用户代码中插入很多的类型判断和分支语句,并且通过这种抽象,使得增加新类型的组件(包括原子组件和组合组件)非常方便。
 
2、实例讨论:
可能因为一直做Web型应用的缘故,很难找到一个自己使用过的、能够准确表现该模式完整效果的底层示例,后来为了找到一个这样的实例以便进行沟通和加深自己的理解,考虑到象Word这种文本处理工具是否采用了这种模式呢,比如以复制和粘贴为例,可以复制的组件包括元组件(如一个字符、一个表格、一个图片等等)和这些元组件的一个集合,这时就可以将这些组件构造成一个树形结构,以表示部分和整体的组件层次结构,如下结构图所示:
 
 
当我们拖动鼠标然后点击“复制”按钮后,如果我们选择的是一个字符就调用字符的复制操作,如果是一个表格/图片就调用表格/图片的复制操作,如果是一块包括文字和图片的组合就调用这个组合的复制操作,而不用加以类型的判断和分别处理,从而简化了复制用户的操作;并且通过这种结构的可扩展性,可以复制的对象类型可以很方便的进行新增和扩充,并且对复制用户没有影响。
(注:在这里通过Composite模式用树形结构实现,可能会带来层次结构很深的问题,因为本人并没有实际文本处理方面的经验,所以希望有这方面经验指点。)
 
3、动机简述:
在该模式的动机中,描述了图形对象的树形结构,包括抽象图形Graphic、图元Line/Text、和组合图形Picture,图元是最基本的图形,没有自元素;若干个图元对象可以组合成Picture组合图形,若干个组合图形还可以再组合成更大的Picture组合图形,依次递归;所有图形都可以进行绘制Draw操作,图元对象进行自己的Draw操作,组合图形调用所有所含图形的Draw操作,这样就使用户的使用具有一致性而更加简单和维护。
 
4、模式效果:
组合Composite模式有两个主要效果:
1)通过抽象用户和组件之间的联系,将组件表示成树形递归结构,使用户可以一致的使用各种类型的组件,包括原子组件和组合组件,从而避免在用户代码中插入很多的类型判断和分支语句;
2)通过这种组建类型抽象,使得增加新类型的组件(包括原子组件和组合组件)非常方便,无需对用户造成影响。
 
5、JSP代码示例:
JSP页面可以是简单的,所有内容都包含在自己的文件中;也可以是复杂的,通过组合其他页面内容来构造自己的内容,类结构图如下:
 
 
一个JSP组合页面实例如下:
组件结构图如下:
 
 
代码清单如下(topBanner.jsp、newPart.jsp等原子页面省略):
main.jsp,表示主页面
 
<%@ page contentType="text/html;charset=GBK"%>

<jsp:include page="/topBanner.jsp" />
<table width="780" cellpadding="0" cellspacing="0" border="0" align="center" bgcolor="#FFFFFF">
  
<tr>
    
<td width="30%" valign="top" align="center">
      
<jsp:include page="/menu.jsp" />
    
</td>
    
<td width="70%" valign="top" align="center">
      
<jsp:include page="/news.jsp" />
    
</td>
  
</tr>
</table>
<jsp:include page="/foot.jsp" />
 
news.jsp,表示新闻汇总页面
 
<%@ page contentType="text/html;charset=GBK"%>

<table width="100%" cellpadding="0" cellspacing="0" border="0" align="center">
  
<tr>
    
<td width="50%" align="center" bgcolor="#FFFFFF">
      
<jsp:include page="/newPart1.jsp" />
    
</td>
    
<td width="50%" align="center" bgcolor="#FFFFFF">
      
<jsp:include page="/newPart2.jsp" />
    
</td>
  
</tr>
  
<tr>
    
<td align="center" bgcolor="#FFFFFF">
      
<jsp:include page="/newPart3.jsp" />
    
</td>
    
<td align="center" bgcolor="#FFFFFF">
      
<jsp:include page="/newPart4.jsp" />
    
</td>
    
</td>
  
</tr>
</table>
 
 
校验值对象——应用Visitor模式和反射:【上一篇】
开题手记:【下一篇】
【相关文章】
  • Hadoop笔记--不需要了解分布式编程地分布式编程
  • 扩展Membership(1) -- 增加密码校验方式
  • 十二款世界顶级杀毒软件下载---有序列号全可免费升级
  • 网站的数据挖掘--用户相似性研究(一)
  • ASP.NET2.0学习7--个性化用户配置
  • ASP.NET2.0学习8--WebPart部件
  • Kaspersky Flaw(4) -- 不正确的校验内核对象类型
  • Kaspersky Flaw(5) -- 修改没有输出和不是系统服务的内核函数
  • Kaspersky Flaw(6) -- 允许用户模式代码操作内核内存
  • 我读《设计模式》--组合模式Composite
  • 【随机文章】
  • Cron服务配置详解
  • 电话录音,电话录音设备,录音器,录音系统,USB电话录音
  • 风险投资及合伙申请
  • ASP与数据库连接、写入、修改、删除、显示的代码整理
  • Linux 下 C++程序的异常处理技巧(源于网上)
  • Linux IPC小结
  • AIX下如何删除某个目录下日期早于凌晨03:00的文件
  • 安装Solaris操作系统
  • Oracle9i初始化参数中文说明(1)
  • 脂溢性皮炎的治疗脂溢性皮炎症状图片脂溢性皮炎治疗美国康本让你满意
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.