﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-roy-文章分类-J2EE Patterns</title><link>http://www.blogjava.net/roy/category/3276.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:07:40 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:07:40 GMT</pubDate><ttl>60</ttl><item><title>Dispatcher View</title><link>http://www.blogjava.net/roy/articles/12512.html</link><dc:creator>风萧萧</dc:creator><author>风萧萧</author><pubDate>Fri, 09 Sep 2005 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/roy/articles/12512.html</guid><wfw:comment>http://www.blogjava.net/roy/comments/12512.html</wfw:comment><comments>http://www.blogjava.net/roy/articles/12512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roy/comments/commentRss/12512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roy/services/trackbacks/12512.html</trackback:ping><description><![CDATA[Dispatcher View（转发视图？）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和前台控制一起用，起到视图导航和管理，转发视图功能，进一步将控制和转发、视图分开。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher dispatcher = getServletContext().<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getRequestDispatcher(page);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dispatcher.forward(request, response);<img src ="http://www.blogjava.net/roy/aggbug/12512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roy/" target="_blank">风萧萧</a> 2005-09-09 10:49 <a href="http://www.blogjava.net/roy/articles/12512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Front Controller</title><link>http://www.blogjava.net/roy/articles/12511.html</link><dc:creator>风萧萧</dc:creator><author>风萧萧</author><pubDate>Fri, 09 Sep 2005 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/roy/articles/12511.html</guid><wfw:comment>http://www.blogjava.net/roy/comments/12511.html</wfw:comment><comments>http://www.blogjava.net/roy/articles/12511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roy/comments/commentRss/12511.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roy/services/trackbacks/12511.html</trackback:ping><description><![CDATA[Front Controller<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Front Controller（前台控制）是GRASP中控制器的扩展，最好的例子莫过于Struts中的action Servlet.Struts中的所有请求用action来处理，主要作用处理各种用户请求并转发，包括：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.认证和授权；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.代理业务逻辑；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.转发并创建合适视图；<BR>最后点，Front Controller应该只做控制，所有业务逻辑和认证授权都要把责任委托给其他类。<img src ="http://www.blogjava.net/roy/aggbug/12511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roy/" target="_blank">风萧萧</a> 2005-09-09 10:45 <a href="http://www.blogjava.net/roy/articles/12511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>View Helper</title><link>http://www.blogjava.net/roy/articles/12509.html</link><dc:creator>风萧萧</dc:creator><author>风萧萧</author><pubDate>Fri, 09 Sep 2005 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/roy/articles/12509.html</guid><wfw:comment>http://www.blogjava.net/roy/comments/12509.html</wfw:comment><comments>http://www.blogjava.net/roy/articles/12509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roy/comments/commentRss/12509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roy/services/trackbacks/12509.html</trackback:ping><description><![CDATA[<P dir=ltr style="MARGIN-RIGHT: 0px">View Helper(视图帮助)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视图帮助类，将数据库中的原数据组装成页面所需要的元素，作用：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.处理元数据；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.视图数据和业务层数据模型适配；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.和业务代理模式结合进一步隐藏业务实现；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;4.包含值对象。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视图帮助可以是JAVABEAN，也可以是TAGS、SERVLET、JSP。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个例子<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_0_87_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_87_Open_Text.style.display='none'; Codehighlighter1_0_87_Closed_Image.style.display='inline'; Codehighlighter1_0_87_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_87_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_87_Closed_Text.style.display='none'; Codehighlighter1_0_87_Open_Image.style.display='inline'; Codehighlighter1_0_87_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_87_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_0_87_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">*A&nbsp;servlet&nbsp;delegates&nbsp;to&nbsp;a&nbsp;command&nbsp;object&nbsp;helper,&nbsp;as<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>shown&nbsp;in&nbsp;the&nbsp;following&nbsp;excerpt:*</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;resultPage&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;command.execute(request,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>response);<BR><IMG id=Codehighlighter1_145_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_145_294_Open_Text.style.display='none'; Codehighlighter1_145_294_Closed_Image.style.display='inline'; Codehighlighter1_145_294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_145_294_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_294_Closed_Text.style.display='none'; Codehighlighter1_145_294_Open_Image.style.display='inline'; Codehighlighter1_145_294_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_145_294_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_145_294_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">*The&nbsp;command&nbsp;object&nbsp;helper&nbsp;uses&nbsp;the&nbsp;business<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>delegate,&nbsp;which&nbsp;is&nbsp;simply&nbsp;implemented&nbsp;as&nbsp;another<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>JavaBean&nbsp;helper,&nbsp;as&nbsp;shown&nbsp;in&nbsp;the&nbsp;following&nbsp;excerpt:*</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>AccountDelegate&nbsp;accountDelegate&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>AccountDelegate();</SPAN></DIV></DIV><img src ="http://www.blogjava.net/roy/aggbug/12509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roy/" target="_blank">风萧萧</a> 2005-09-09 10:31 <a href="http://www.blogjava.net/roy/articles/12509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Intercepting Filter</title><link>http://www.blogjava.net/roy/articles/12429.html</link><dc:creator>风萧萧</dc:creator><author>风萧萧</author><pubDate>Thu, 08 Sep 2005 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/roy/articles/12429.html</guid><wfw:comment>http://www.blogjava.net/roy/comments/12429.html</wfw:comment><comments>http://www.blogjava.net/roy/articles/12429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roy/comments/commentRss/12429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roy/services/trackbacks/12429.html</trackback:ping><description><![CDATA[<P>Intercepting Filter（拦截过滤器？）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个不用多说了，拦截用户的请求，在WEB中实现个Filter接口，然后配置在WEB.XML下就可以用，FilterManager已经由服务器提供商写好了，基于应用上只需实现就可以了，这里关注的是这个模式解决的问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.客户有没被授权？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.客户是否具有有效会话？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.客户IP地址是否来自信任网络段？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.客户端传输使用何种方法编码？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.客户端浏览器类型我们支持吗？<BR>所有这些将决定请求的转发，以后后续的流程。如果不用Filter，则需要在其后的控制中做条件测试，然后再处理请求，一般用嵌套IF/ELSE就可完成。但缺点在于，<FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不够简练</FONT>，多个控制做的条件测试都相同。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将过滤和控制放在一起，<FONT color=#ff0000>不够灵活</FONT>，过滤通常是可变的，比如信任IP地址段，或者是过滤的条件发生变化，都会带来对所有控制的变更。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;灵活和简单的解决方法就是用一种简单的可增减组件的机制，使得每个组件完成特殊的过滤请求。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （原文：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The key to solving this problem in a flexible and unobtrusive manner is to have a simple mechanism for adding and removing processing components, in which each component completes a specific filtering action.）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 贴个Filter<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;StandardEncodeFilter&nbsp;extends&nbsp;BaseEncodeFilter&nbsp;{<BR></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Creates&nbsp;new&nbsp;StandardEncodeFilter</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;StandardEncodeFilter()&nbsp;{&nbsp;}<BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;doFilter<BR>&nbsp;&nbsp;&nbsp;(javax.servlet.ServletRequest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;servletRequest,<BR>&nbsp;&nbsp;&nbsp;&nbsp;javax.servlet.ServletResponse<BR>&nbsp;&nbsp;&nbsp;&nbsp;servletResponse,<BR>&nbsp;&nbsp;&nbsp;&nbsp;javax.servlet.FilterChain<BR>&nbsp;&nbsp;&nbsp;&nbsp;filterChain)&nbsp;<BR>&nbsp;&nbsp;&nbsp;throws&nbsp;java.io.IOException,<BR>&nbsp;&nbsp;&nbsp;javax.servlet.ServletException&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;contentType&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servletRequest.getContentType();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;((contentType&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN style="COLOR: #000000">||</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contentType.equalsIgnoreCase(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">application/x-www-form-urlencoded</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">))&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;translateParamsToAttributes<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(servletRequest,servletResponse);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterChain.doFilter(servletRequest,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servletResponse);<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;translateParamsToAttributes(<BR>&nbsp;&nbsp;ServletRequest&nbsp;request,&nbsp;<BR>&nbsp;&nbsp;ServletResponse&nbsp;&nbsp;&nbsp;response){<BR>&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;paramNames&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;request.getParameterNames();<BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000">&nbsp;(paramNames.hasMoreElements())&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;paramName&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(String)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramNames.nextElement();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;[]&nbsp;values;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;request.getParameterValues<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(paramName);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">paramName&nbsp;=&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;paramName);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(values.length&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(paramName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(paramName,&nbsp;values);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}</SPAN></DIV></DIV><img src ="http://www.blogjava.net/roy/aggbug/12429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roy/" target="_blank">风萧萧</a> 2005-09-08 14:34 <a href="http://www.blogjava.net/roy/articles/12429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>前言</title><link>http://www.blogjava.net/roy/articles/12426.html</link><dc:creator>风萧萧</dc:creator><author>风萧萧</author><pubDate>Thu, 08 Sep 2005 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/roy/articles/12426.html</guid><wfw:comment>http://www.blogjava.net/roy/comments/12426.html</wfw:comment><comments>http://www.blogjava.net/roy/articles/12426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/roy/comments/commentRss/12426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/roy/services/trackbacks/12426.html</trackback:ping><description><![CDATA[<P>J2EE&nbsp;&nbsp;模式到底有多重要，为什么要提模式，它和GRASP模式有什么关系？<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实际上，我觉得J2EE模式更象是GRASP模式的扩展和实现，模式的运用起到组件的作用，即能低耦合，高内聚，提高重用性，使得组件或层之间的变更对相互不大，便于维护和变更、扩展。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GRASP模式（General Responsibility Assignment Software Patterns)是OOA和系统设计的基础，包括<FONT style="BACKGROUND-COLOR: #000080" color=#ffffff>信息专家、创建者、高内聚、低耦合和控制器、多态、中介、纯虚构、受保护变化。<BR><FONT style="BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#000000>J2EE模式如图<BR><IMG height=480 alt=r_pre.JPG src="http://www.blogjava.net/images/blogjava_net/roy/3277/r_pre.JPG" width=362 border=0><BR></FONT></FONT><BR></FONT>&nbsp;</P><img src ="http://www.blogjava.net/roy/aggbug/12426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/roy/" target="_blank">风萧萧</a> 2005-09-08 13:55 <a href="http://www.blogjava.net/roy/articles/12426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>