﻿<?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-awp001-随笔分类-JDK</title><link>http://www.blogjava.net/awp001/category/45205.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 02 Jun 2010 03:51:23 GMT</lastBuildDate><pubDate>Wed, 02 Jun 2010 03:51:23 GMT</pubDate><ttl>60</ttl><item><title>关于Java缺乏多继承机制的探讨</title><link>http://www.blogjava.net/awp001/archive/2010/06/02/322536.html</link><dc:creator>awp001</dc:creator><author>awp001</author><pubDate>Wed, 02 Jun 2010 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/awp001/archive/2010/06/02/322536.html</guid><wfw:comment>http://www.blogjava.net/awp001/comments/322536.html</wfw:comment><comments>http://www.blogjava.net/awp001/archive/2010/06/02/322536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/awp001/comments/commentRss/322536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/awp001/services/trackbacks/322536.html</trackback:ping><description><![CDATA[&nbsp;
<p style="text-indent: 21pt"><span style="font-family: 宋体">最近笔者在软件产品研发过程中遇到一问题，解决起来相当的棘手。产品架构在规划阶段定位分布式多层架构，第一阶段采用</span>B/S<span style="font-family: 宋体">架构，同时研发出全部的服务端组件（</span>Servlet<span style="font-family: 宋体">和</span>Java beans<span style="font-family: 宋体">），在组件成熟并且</span>B/S<span style="font-family: 宋体">架构产品成熟的情况下，再研发</span>C/S<span style="font-family: 宋体">架构产品，这样一来，风险就大大降低了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在</span>B/S<span style="font-family: 宋体">架构产品研发的时候，使用了</span>Struts<span style="font-family: 宋体">框架，其中的两大基础对象是</span>ActionForm<span style="font-family: 宋体">和</span>Action<span style="font-family: 宋体">。自定义的</span>ActionForm<span style="font-family: 宋体">都要继承自</span>org.apache.struts.action.ActionForm<span style="font-family: 宋体">，例如：<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_69_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_134_Open_Text.style.display='none'; Codehighlighter1_69_134_Closed_Image.style.display='inline'; Codehighlighter1_69_134_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_134_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_134_Closed_Text.style.display='none'; Codehighlighter1_69_134_Open_Image.style.display='inline'; Codehighlighter1_69_134_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">Public&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClassForm&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionForm&nbsp;</span><span id="Codehighlighter1_69_134_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;String&nbsp;a;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;String&nbsp;b;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">getter&nbsp;和&nbsp;setter省略</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span></div>
</span>&nbsp;
<p style="text-indent: 21pt"><span style="font-family: 宋体">这在</span>B/S<span style="font-family: 宋体">产品研发阶段没有任何问题，但是到了</span>C/S<span style="font-family: 宋体">产品研发阶段，问题就来了，客户端提交给服务器的数据不再是</span>ActionForm<span style="font-family: 宋体">，而是只包含字段的纯</span>JavaBean,<span style="font-family: 宋体">代码如下：<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_21_86_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_86_Open_Text.style.display='none'; Codehighlighter1_21_86_Closed_Image.style.display='inline'; Codehighlighter1_21_86_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_86_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_21_86_Closed_Text.style.display='none'; Codehighlighter1_21_86_Open_Image.style.display='inline'; Codehighlighter1_21_86_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">Public&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClass&nbsp;</span><span id="Codehighlighter1_21_86_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;String&nbsp;a;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;String&nbsp;b;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">getter&nbsp;和&nbsp;setter省略</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
&nbsp;
<p style="text-indent: 21pt"><span style="font-family: 宋体">于是乎，在原来的</span>B/S<span style="font-family: 宋体">架构研发成果上，对于</span>C/S<span style="font-family: 宋体">架构产品的研发，都多了这个纯</span>JavaBean<span style="font-family: 宋体">的封装，如果业务逻辑发生变化，要对</span>MyClassForm<span style="font-family: 宋体">和</span>MyClass<span style="font-family: 宋体">都进行修改。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">如果</span>Java<span style="font-family: 宋体">能支持多继承，那么就很省事情了。即自定义的</span>MyClassForm<span style="font-family: 宋体">能同时从</span>org.apache.struts.action.ActionForm<span style="font-family: 宋体">和</span>MyClass<span style="font-family: 宋体">继承：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_77_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_79_Open_Text.style.display='none'; Codehighlighter1_77_79_Closed_Image.style.display='inline'; Codehighlighter1_77_79_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_79_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_79_Closed_Text.style.display='none'; Codehighlighter1_77_79_Open_Image.style.display='inline'; Codehighlighter1_77_79_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">Public&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClassForm&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;MyClass，org.apache.struts.action.ActionForm&nbsp;</span><span id="Codehighlighter1_77_79_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;可惜啊，JDK不支持多继承。<br />
</span>
 <img src ="http://www.blogjava.net/awp001/aggbug/322536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/awp001/" target="_blank">awp001</a> 2010-06-02 11:49 <a href="http://www.blogjava.net/awp001/archive/2010/06/02/322536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>