﻿<?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-lixiang927</title><link>http://www.blogjava.net/lixiang927/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 12:38:08 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 12:38:08 GMT</pubDate><ttl>60</ttl><item><title>abstract and fragments in 6.8</title><link>http://www.blogjava.net/lixiang927/archive/2009/06/08/280643.html</link><dc:creator>lixiang927</dc:creator><author>lixiang927</author><pubDate>Mon, 08 Jun 2009 05:52:00 GMT</pubDate><guid>http://www.blogjava.net/lixiang927/archive/2009/06/08/280643.html</guid><wfw:comment>http://www.blogjava.net/lixiang927/comments/280643.html</wfw:comment><comments>http://www.blogjava.net/lixiang927/archive/2009/06/08/280643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lixiang927/comments/commentRss/280643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lixiang927/services/trackbacks/280643.html</trackback:ping><description><![CDATA[<span style="font-family: simsun; font-size: 14px; line-height: 23px; ">final和abstract，private和abstract，static和abstract，这些是不能放在一起的修饰符，因为abstract修饰的方法是<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
必须在其子类中实现（覆盖），才能以多态方式调用，以上修饰符在修饰方法时期子类都覆盖不了这个方法，final是不可以覆盖，private是不能够继承到子类，所以也就不能覆盖，static是可以覆盖的，但是在调用时会调用编译时类型的方法，因为调用的是父类的方法，而父类的方法又是抽象的方法，又不能够调用，所以上的修饰符不能放在一起。</span>
<div><font face="simsun" size="4"><span style="font-size: 14px; line-height: 23px;">接口是一种程序结构，是特殊的抽象类。接口中的方法必须都是公开的抽象方法（public abstract），接口中的属性都是公开静态常量（public static final）。</span></font></div>
<div><font  face="simsun" size="4"><span  style="font-size: 14px; line-height: 23px; ">
<div>建造者模式和工厂模式非常相似：建造者模式最主要功能是基本方法的调用顺序安排，也就是这些基本方法已经实现了；而工厂方法则重点是创建，你要什么对象我创造一个对象出来，组装顺序则不是他关心的。</div>
</span></font></div>
<img src ="http://www.blogjava.net/lixiang927/aggbug/280643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lixiang927/" target="_blank">lixiang927</a> 2009-06-08 13:52 <a href="http://www.blogjava.net/lixiang927/archive/2009/06/08/280643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Class.forName()</title><link>http://www.blogjava.net/lixiang927/archive/2009/06/07/280528.html</link><dc:creator>lixiang927</dc:creator><author>lixiang927</author><pubDate>Sun, 07 Jun 2009 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/lixiang927/archive/2009/06/07/280528.html</guid><wfw:comment>http://www.blogjava.net/lixiang927/comments/280528.html</wfw:comment><comments>http://www.blogjava.net/lixiang927/archive/2009/06/07/280528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lixiang927/comments/commentRss/280528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lixiang927/services/trackbacks/280528.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span ><span style="font-family:宋体;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">一</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:Arial;color:black">jvm</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">会执行静态代码段，静态代码是和</span></span><span lang="EN-US" style="font-family:Arial;color:black">class</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">绑定的，</span></span><span lang="EN-US" style="font-family:Arial;color:black">class</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">装载成功就表示执行了你的静态代码了，而且以后不会再走这段静态代码了。</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black">Class.forName(xxx.xx.xx)&#160;</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">返回的是一个类</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">Class.forName(xxx.xx.xx);</span></span></span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的作用是要求</span></span><span lang="EN-US" style="font-family:Arial;color:black">JVM</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">查找并加载指定的类，也就是说</span></span><span lang="EN-US" style="font-family:Arial;color:black">JVM</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">会执行该类的静态代码段</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:21.0pt"><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:black">在初始化一个类，生成一个实例的时候，</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">方法和</span></span><span lang="EN-US" style="font-family:Arial;color:black">new</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">关键字除了一个是方法，一个是关键字外，最主要有什么区别？它们的区别在于创建对象的方式不一样，前者是使用类加载机制，后者是创建一个新类。那么为什么会有两种创建对象方式？这主要考虑到软件的可伸缩、可扩展和可重用</span></span><span style="font-family:Arial;color:black"> </span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">等软件设计思想。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black">Java</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">中工厂模式经常使用</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">方法来创建对象，因此从为什么要使用工厂模式上可以找到具体答案。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">例如：</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">class&#160;c&#160;=&#160;Class.forName(&#8220;Example&#8221;);&#160;</span><br />
<span style="color:black">factory&#160;=&#160;(ExampleInterface)c.newInstance();&#160;</span><br />
<br />
</span></span><span ><span style="font-family:宋体;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">其中</span></span><span lang="EN-US" style="font-family:Arial;color:black">ExampleInterface</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">是</span></span><span lang="EN-US" style="font-family:Arial;color:black">Example</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的接口，可以写成如下形式：</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">String&#160;className&#160;=&#160;"Example";&#160;</span><br />
<span style="color:black">class&#160;c&#160;=&#160;Class.forName(className);&#160;</span><br />
<span style="color:black">factory&#160;=&#160;(ExampleInterface)c.newInstance();&#160;</span><br />
<br />
</span></span><span ><span style="font-family:宋体;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">进一步可以写成如下形式：</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">String&#160;className&#160;=&#160;readfromXMlConfig;//</span></span></span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">从</span></span><span lang="EN-US" style="font-family:Arial;color:black">xml&#160;</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">配置文件中获得字符串</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">class&#160;c&#160;=&#160;Class.forName(className);&#160;</span><br />
<span style="color:black">factory&#160;=&#160;(ExampleInterface)c.newInstance();&#160;</span><br style="mso-special-character:line-break" />
<br style="mso-special-character:line-break" />
<o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-indent:21.0pt"><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:black">从</span></span><span lang="EN-US" style="font-family:Arial;color:black">JVM</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的角度看，我们使用关键字</span></span><span lang="EN-US" style="font-family:Arial;color:black">new</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">创建一个类的时候，这个类可以没有被加载。但是使用</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">方法的时候，就必须保证：</span></span><span lang="EN-US" style="font-family:Arial;color:black">1</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">、这个</span></span><span style="font-family:Arial;color:black"> </span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">类已经加载；</span></span><span lang="EN-US" style="font-family:Arial;color:black">2</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">、这个类已经连接了。而完成上面两个步骤的正是</span></span><span lang="EN-US" style="font-family:Arial;color:black">Class</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的静态方法</span></span><span lang="EN-US" style="font-family:Arial;color:black">forName()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">所完成的，这个静态方法调用了启动类加载器，即加载</span></span><span ><span lang="EN-US" style="font-family:Arial;color:black">
java&#160;API</span></span><span ><span style="font-family:
宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">的那个加载器。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:21.0pt"><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;
mso-bidi-font-family:Arial;color:black">现在可以看出，</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">实际上是把</span></span><span lang="EN-US" style="font-family:Arial;color:black">new</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">这个方式分解为两步，即首先调用</span></span><span lang="EN-US" style="font-family:Arial;color:black">Class</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">加载方法加载某个类，然后实例化。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">这样分步的好处是显而易见的。我们可以在调用</span></span><span lang="EN-US" style="font-family:Arial;color:black">class</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的静态加载方法</span></span><span lang="EN-US" style="font-family:Arial;color:black">forName</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">时获得更好的灵活性，提供给了一种降耦的手段。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<br />
</span></span><span ><span style="font-family:宋体;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">最后用最简单的描述来区分</span></span><span lang="EN-US" style="font-family:Arial;color:black">new</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">关键字和</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">方法的区别：</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">newInstance:&#160;</span></span></span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">弱类型。低效率。只能调用无参构造。</span></span><span lang="EN-US" style="font-family:Arial;color:black">&#160;</span><span ><span lang="EN-US" style="font-family:Arial"><br />
<span style="color:black">new:&#160;</span></span></span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">强类型。相对高效。能调用任何</span></span><span lang="EN-US" style="font-family:Arial;color:black">public</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">构造。</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black"><o:p>&#160;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black">Class&#160;clazz&#160;=&#160;cl.loadClass("XXX.XXX");</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">没有指定是否初始化的选项。只有执行</span></span><span lang="EN-US" style="font-family:Arial;color:black">clazz.newInstance()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">；时才能够初始化类。可以说</span></span><span lang="EN-US" style="font-family:Arial;color:black">Class.forName("XXX.XXX",&#160;false,&#160;cl)</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">执行过程是一致的。只是</span></span><span lang="EN-US" style="font-family:Arial;color:black">ClassLoader.loadClass()</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">是更底层的操作。</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black"><o:p>&#160;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:Arial;color:black">My conclusion</span><span lang="EN-US" style="font-family:Arial">&#160;<span style="color:black">: Class.forname()</span></span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">是装载一个类，并且初始化</span></span><span lang="EN-US" style="font-family:Arial;color:black">static</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">，然后才可以</span></span><span lang="EN-US" style="font-family:Arial;color:black">newInstance()<o:p></o:p></span></p>
<p class="MsoNormal"><span ><span style="font-family:宋体;
mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:
Arial;color:black">它调用了</span></span><span lang="EN-US" style="font-family:Arial;color:black">ClassLoader.loadClass</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">（）</span></span><span style="font-family:Arial;color:black"> </span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">，该函数有个参数，设为</span></span><span lang="EN-US" style="font-family:Arial;color:black">true</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">的话，初始化</span></span><span lang="EN-US" style="font-family:Arial;color:black">static</span><span ><span style="font-family:宋体;mso-ascii-font-family:Arial;
mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black">，反之不初始化。</span></span><span lang="EN-US" style="font-family:Arial;color:black"><o:p></o:p></span></p>
<img src ="http://www.blogjava.net/lixiang927/aggbug/280528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lixiang927/" target="_blank">lixiang927</a> 2009-06-07 23:46 <a href="http://www.blogjava.net/lixiang927/archive/2009/06/07/280528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转：PO VO BO DTO POJO DAO全称</title><link>http://www.blogjava.net/lixiang927/archive/2009/04/22/266917.html</link><dc:creator>lixiang927</dc:creator><author>lixiang927</author><pubDate>Wed, 22 Apr 2009 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/lixiang927/archive/2009/04/22/266917.html</guid><wfw:comment>http://www.blogjava.net/lixiang927/comments/266917.html</wfw:comment><comments>http://www.blogjava.net/lixiang927/archive/2009/04/22/266917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lixiang927/comments/commentRss/266917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lixiang927/services/trackbacks/266917.html</trackback:ping><description><![CDATA[<span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; ">PO：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
persistant object持久对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
最形象的理解就是一个PO就是数据库中的一条记录。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
好处是可以把一条记录作为一个对象处理，可以方便的转为其它对象。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "></p>
<hr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
BO：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<font size="4" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">business object</font><font size="4" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">业务对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
比如一个简历，有教育经历、工作经历、社会关系等等。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
我们可以把教育经历对应一个PO，工作经历对应一个PO，社会关系对应一个PO。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
建立一个对应简历的BO对象处理简历，每个BO包含这些PO。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
这样处理业务逻辑时，我们就可以针对BO去处理。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</font></p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "></p>
<hr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
VO ：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
value object值对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<font size="3" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">ViewObject表现层对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</font>主要对应界面显示的数据对象。对于一个WEB页面，或者SWT、SWING的一个界面，用一个VO对象对应整个界面的值。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "></p>
<hr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
DTO ：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
Data Transfer Object数据传输对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
主要用于远程调用等需要大量传输对象的地方。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
比如我们一张表有100个字段，那么对应的PO就有100个属性。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
但是我们界面上只要显示10个字段，<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
客户端用WEB service来获取数据，没有必要把整个PO对象传递到客户端，<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
这时我们就可以用只有这10个属性的DTO来传递结果到客户端，这样也不会暴露服务端表结构.到达客户端以后，如果用这个对象来对应界面显示，那此时它的身份就转为VO<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "></p>
<hr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
POJO ：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<font color="#333333" size="3" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">plain&#160;ordinary&#160;java&#160;object&#160;简单java对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</font>个人感觉POJO是最常见最多变的对象，是一个中间对象，也是我们最常打交道的对象。<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
一个POJO持久化以后就是PO<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
直接用它传递、传递过程中就是DTO<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
直接用来对应表示层就是VO<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "></p>
<hr style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; ">DAO：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
data access object数据访问对象<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
这个大家最熟悉，和上面几个O区别最大，基本没有互相转化的可能性和必要.<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
主要用来封装对数据库的访问。通过它可以把POJO持久化为PO，用PO组装出来VO、DTO<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
&#160;&#160;&#160;&#160;&#160;&#160;总结下我认为一个对象究竟是什么O要看具体环境，在不同的层、不同的应用场合，对象的身份也不一样，而且对象身份的转化也是很自然的。就像你对老婆来说就是老公，对父母来说就是子女。设计这些概念的初衷不是为了唬人而是为了更好的理解和处理各种逻辑，让大家能更好的去用<font color="#ff0000" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">面向对象</font>的方式处理问题.<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />
&#160;&#160;&#160;&#160;&#160;&#160;大家千万不要陷入过度设计，大可不必为了设计而设计一定要在代码中区分各个对象。一句话技术是为应用服务的。</p>
<p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14px; line-height: 23px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; "><img src="http://www.blogjava.net/images/blogjava_net/lixiang927/pojo.jpg" width="557" height="480" alt="" /><br />
</p>
</span>
<img src ="http://www.blogjava.net/lixiang927/aggbug/266917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lixiang927/" target="_blank">lixiang927</a> 2009-04-22 10:28 <a href="http://www.blogjava.net/lixiang927/archive/2009/04/22/266917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>