Composite模式是将树形结构的树枝(composite,还有分支)和叶(primitive 没有分支)同等对待,这样就减少系统的复杂性.
这篇文章从jsp页面布局到struts的composite模式,谈得蛮多,重点部分我觉得好像不是很明确。
他说在struts的Tiles技术中,为取得如下页面:
下列xml代码里使用了Composite模式:
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration//EN" "http://jakarta.apache.org/struts/dtds/tiles-config.dtd">
<tiles-definitions> <!-- 这是个组合--> <definition name='sidebar-definition' path='sidebar-layout.jsp'> <put name='top' value='flags.jsp'/> <put name='bottom' value='sidebar-links.jsp'/> </definition>
<definition name='sidebar-header-footer-definition' path='header-footer-sidebar-layout.jsp'> <!--访问sidebar-definition 和访问下面的header一样,就象 访问单个Jsp页面,所以这里是composite模式--> <put name='sidebar' value='sidebar-definition' type='definition'/>
<put name='header' value='header.jsp'/> <put name='content' value='content.jsp'/> <put name='footer' value='footer.jsp'/> </definition> </tiles-definitions>
|
其实我觉得 之所以能达到"访问sidebar-definition 和访问下面的header一样,就象访问单个Jsp页面,",这是因为使用了taglib技术才有的客观效果,如果把这个客观效果也归纳为设计模式,那么设计模式不是太多了?我觉得作者是个“泛设计模式主义者”。呵呵
不过,作者在文章中,从include到struct的taglib写得很全面,平时我们偷懒,界面上就使用include header.jsp或include footer.jsp就可以了,虽然这重用了页头页尾的内容,但是这并不能重用layout布局,重用布局是个让人不容易理解的东西,重用布局就是多个页面使用同一个布局,这又类似html中的frame,其实,struts的重用布局概念就类似html的frame。
如果我们在表现层又要重用内容和布局,那么毫无疑问使用struts的Tiles技术,而复杂Tiles技术中常常有composite模式。
文章网址按下面:
A look at the Composite design pattern