<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>凤舞凰扬</title>
    <description>我如我，似凤舞，如凰扬, 轻狂如我,淡雅如我, 激情如我, 沉思如我.
我在,故我思; 我思, 故我永恒.</description>
    <link>http://phenix.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>架构、框架、模式之轻松掌握设计模式（原型模式）</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/71966" style="color:red;">http://phenix.javaeye.com/blog/71966</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial"><font face="Arial"><font face="Arial">&nbsp;&nbsp; 好了，到了构建类型模式中的最后一种（当然是GOF）原型模式了。这个模式似乎是被讨论得最少的，原因是在Java中，Object本身便带有clone的方法（当然，它需要使用实现Cloneable接口的方式来激活）。而基于原型的clone也相对比较少的使用（最主要的原因是比较难以确定是深度clone还是浅度clone）。<br />
&nbsp;&nbsp; 我们追溯不了这种模式的起源和ghost有何关系（其实根本就没有任何关系），只是感觉这样的一种模式，在现实生活中又是那么的常见。我们经常在安装好操作系统以及必备的软件后（比如升级包，office等等），将系统用ghost备份一下，这样可以让我们有问题的适合尽快还原。而许多大公司在管理公司机器的时候也是采用统一的clone包，快速安装和恢复系统。这些生活其实也就描述了clone的背景：简单而又能快速地去产生所期望的对象的副本。所期望的对象自然就是原型对象了。<br />
&nbsp;&nbsp; 不过，现实生活中的另外一些例子，也可以给我们另样的思考。我们经常会发现，我们有时候使用clone的系统很不稳定，时不时有死机出问题的情况，而公司进行clone还原也是经常对同样配置的电脑进行操作，甚至不允许修改分区（我们公司的电脑都只有一个C区，哪怕它有200G）。这是为何呢？这便是作为原型存在的另外一种背景，那就是相同的环境。在不同的电脑配置中（只是因为都使用基于X86结构的通用配置，所以问题出现较少，但依然存在），通过镜像而还原的系统往往是不稳定的，因为许多系统环境的配置变了。我们也知道，在原型模式中其实有和实际生活中的clone还有个小小区别，也就是可以控制clone的程度（模式中当然可以通过不同实现来控制对象的深度clone或者浅度clone，而现实生活中往往是完全复制）。我们将这种思考带到原型模式的应用中来说吧。使用原型对象所产生的新对象副本在其使用环境下是否又跟原型对象一致呢？这其实决定了两点，一是我们要进行怎么样的clone实现，二是是否该提供这种模式来创建我们的对象。<br />
&nbsp;&nbsp; 上周有些事情,一直没有写完,也没有更新, 今天继续.....<br />
&nbsp;&nbsp; 原型模式在使用的时候,容易遇到这样的问题和误区: 我们常常希望通过clone的方式降低对象复制的曝光度(对于使用者来说,不需要关心对象是怎么样复制的),但是我们往往忽略了一些因素和条件限制, 第一,内部的状态属性是否具备或者能是否准许被复制? 第二,究竟该做到何种程度的复制?(由对象关联引发出来的对象链究竟是共用还是继续复制?) 而这类问题往往在设计之初是很难预料和估计的. </font></font></font>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/71966#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 21:17:00 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/71966</link>
        <guid>http://phenix.javaeye.com/blog/71966</guid>
      </item>
      <item>
        <title>架构、框架、模式之轻松掌握设计模式（单例模式）</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/71572" style="color:red;">http://phenix.javaeye.com/blog/71572</a>&nbsp;
          发表时间: 2007年04月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">&nbsp;&nbsp;&nbsp; 单例模式可以说是GOF设计模式中最为简单的模式,也是背负骂名最多的模式。不过一直以来，我对许多类似关于它是最烂和反模式的评价却不尽以为然。<br />
&nbsp;&nbsp;&nbsp; 模式本身很简单，除了牵涉多线程安全问题引起的一点罗唆外。所以，我不太想讨论GOF提供的关于该模式的参考实现。我所关注的是它背后带来的对问题的看法和思考方式。<br />
&nbsp;&nbsp;&nbsp; 我们先看看单例模式出现的背景很存在的意义。单例模式通俗来讲就是确保类只有一个实例。那么好，我们问一下，为什么要确保类只有一个实例呢？其实无非是两个方面的作用：一、想控制资源的使用，它又体现在两个方面，其中之一是控制实例数目的产生来节约资源，其二通过线程同步控制资源的并发访问；二、想作为一种通信媒介，在不建立直接关联的条件下让不相关的两个程序进行通信，尤其是多线程。第二点，我说的有些抽象，简单讲吧，就类似于大家基于一个黑板讨论东西，而不关心参与讨论的对象。单例就取了黑板的作用。有人会说，为什么不将同一实例传递给每个使用者就是啊！这样的话，会带来一个问题，就是总是需要一个媒介将该对象传递给所有的使用者。<br />
&nbsp;&nbsp;&nbsp; 简单描述了一下单例模式出现的背景，我们再来看看，网络中对它嗤之以鼻的一些重要的观点：<br />
&nbsp;&nbsp;&nbsp; 1. 使用单例模式有一个很重要的必要条件：在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来说，如果一个类可以有几个实例共存，那么就没有必要使用单例类。<br />
&nbsp;&nbsp;&nbsp; 2.singleton是邪恶的，是反模式（http://www.jdon.com/article/17578.html），为什么说邪恶，因为它有陷井，或者很虚伪，容易诱骗初学者上当。<br />
&nbsp;&nbsp;&nbsp; 3.如果在J2EE的范围内做一次正式的投票，我敢打赌Factory Method、Prototype、Singleton和Bridge绝对是在被淘汰之列，因为它们做的事情已经完全被支持Dependency Injection的容器包办了，程序员再也不需要知道这些模式。所以说呢，&ldquo;Singleton是邪恶&rdquo;的或者是一个非伪命题，不过更可能是一个伪问题，因为&hellip;&hellip;谁还需要Singleton呢？你只需要PicoContainer或者Spring Core。<br />
&nbsp;&nbsp;&nbsp; 4.在分布式环境下，比如集群、负载均衡或者多路应用的情况下，单实例是不存在也无法做到的。因为静态方法只能控制在一个环境下的有效。<br />
&nbsp;&nbsp;&nbsp; 说实话，我倒不想去翻案，或者去挑战啥的，不过总是觉得许多言论都存在一些误区或者说隐含的前提。我们依次看一下这些观点吧。第一个观点强调了一个所谓的必要条件，呵呵，这就是它的问题所在了，谁说单例模式有这样的必要条件呢？一个类只有一个实例的适合才应当使用单例模式，呵呵，这话听起来根本就没法驳，有多个实例又怎么去使用单例模式呢？其实啊，这就是最简单的本末倒置了。如果我都知道了我只能有一个实例，我自然不能考虑多例模式。那么考虑使用这个模式的基点究竟在哪个方面呢？其次，什么是有必要，什么是没必要？如果有更好的替代，比如说通过第三方的控制，比如池或者容器来控制实例更合理，那么我们是不是具备什么情况下都可以使用他们呢？必要与否的判定并不是从模式本身出发的，而是从模式应用的场景出发的。<br />
&nbsp;&nbsp;&nbsp; 继续，我们来看第二个问题，singleton is evil,是种反模式，其实来说，是有蛮多道理的，但是问题的本身也似乎不是从模式本身出发，而是从那些不熟悉模式的人盲目使用模式的角度来评说的。看完整篇的文章，我都不清楚这个所谓的陷阱在哪里？singleton不会有线程安全问题的么？GOF的文中从来没有讨论个这个问题的。其实道理很简单啊，线程同步问题归根到底是编程的问题，跟单例又有何关系，多实例就不会有了？问题的关键只是多实例的同步问题比较难以发现，单实例的比较容易发现而已。只是许多应用者根本就没有考虑过所谓的同步问题，所以被发现时怨气都撒在singleton身上了。它，的确有些冤。<br />
&nbsp;&nbsp;&nbsp; 再继续，J2EE做投票，singleton模式将被容器包办，所以该被淘汰。这里其实有两个语境，其一，强调了J2EE和给予所谓Dependency Injection的容器，但是试问一下，singleton模式强调过这样的应用场景么？模式本身只是面向对象的设计思路，跟所谓的语言环境又哪来那么大关联啊？其二，容器真能处理所有的事情么？即使是再强的spring，它的容器也一般用来维护business 的bean实例吧？难道所有应用程序实例的产生都是靠spring的BeanContext或者BeanFactory不成？难道要spring整个侵入业务系统，解决了所谓的问题，才是正道呢？<br />
&nbsp;&nbsp;&nbsp; 最后，第四个问题，有一定的道理，从GOF参考实现的角度，如果我们使用这样的方式去实现我们的应用系统，那么它们是不能在多通路、集群或者负载均衡的情况下应用。这样一来也就是限制了应用系统。但是，提出这样一个问题的人是否又思考过，你对这个模式的探讨是否局限在了GOF提供的实现上呢？模式是解决一类问题的解决方法和实践总结，的确它原始的出处受限于当时的环境，但是这种思路是否依然可以得到扩展和移植呢？一个immutable的实例是否可以做成这样的单实例呢，或者一个由独立系统提供的全局访问控制的mutable实例是否科研做成呢？当然，它在不同的环境会存在多个影子，但是对于每个应用的环境来说，它不是一样作为单个实例出现的么？我们来好好看看单例模式的意图吧： 保证一个类仅有一个实例，并提供一个访问它的全局访问点。我们所做的只是将对意图的理解放在了独立的系统环境中，而不是整个应用系统中。<br />
&nbsp;&nbsp;&nbsp; 有些意思了，好，我们再看看另外一篇帖子，指出为什么singleton is evil。http://blogs.msdn.com/scottdensmore/archive/2004/05/25/140827.aspx，整的来说，四个观点，我们大致了解一下：<br />
&nbsp;&nbsp;&nbsp; 1.singleton是全局的，它和全局变量又有什么区别呢？全局是不好的，应该通过接口去访问而不是了解类本身。（哈，有些误区，其实是许多人对设计模式的误区：设计模式究竟是运用在何种层次？每个设计模式都是单独出现解决一切问题的么？使用singleton可以选择延迟装载，也完全可以被隔离，对于使用者来说不可知。）<br />
&nbsp;&nbsp;&nbsp; 2.单例模式限制对象的创建，这是不应该的，即使限制也应该通过工厂等其他模式。（呵呵，又是有趣的一点，使用了工厂后的单例模式就不是单例模式？它无法是单例模式和工厂模式的结合罢了。怎么感觉老是拿使用单例模式就都必须直接访问该类一样呢？）<br />
&nbsp;&nbsp;&nbsp; 3.单例将提升类之间的耦合关系。唉，又是这样的论点，隔离一下不就好了么？<br />
&nbsp;&nbsp;&nbsp; 4.只要程序存在多久，单例的状态就维持多久。持久的状态是单元测试的敌人。说实话，没怎么搞明白，第一，单例的状态又不是不能改变，怎么就不能测试。第二难道单元测试还去测试实例的产生和消亡？即使是一个永不消亡的对象又怎么就是单元测试的敌人了。冤！<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 看到这里，相信好多人准备拍砖了，又是一个死板教条主义的维护者。赶紧澄清啊！不是，真的不是。我从来没有去为单例模式辩护，更不是打死不认帐的角色。我只是在旁，冷静的看看这些，我从来不会因为它是GOF的23种设计模式而乱用，更不会因为某些人的言论而去排斥它。我所知道的，模式只是解决某类特定问题的一种解决方案而已。<br />
&nbsp;&nbsp;&nbsp; 我所想，所说，所做的只是希望会有一些朋友冷静的，思考的去看待它......</font>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/71572#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 16 Apr 2007 22:35:00 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/71572</link>
        <guid>http://phenix.javaeye.com/blog/71572</guid>
      </item>
      <item>
        <title>架构、框架、模式之轻松掌握设计模式（Builder）</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/70384" style="color:red;">http://phenix.javaeye.com/blog/70384</a>&nbsp;
          发表时间: 2007年04月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>Builder模式是设计模式中比较少争议的一个，其实也是比较有内容的一种。</div>
<div>我们先来看Builder模式的结构，它由四个部分组成：Director , Builder , Builder实现类，Product类。Part作为Product内部的概念被隐藏了。它的设计初衷是将复杂对象的构成（也就是部件）和构建逻辑（也就是算法或者说处理顺序）分离开来。换成现实中最简单的例子，一堆积木玩具，按照图纸，可以堆砌不同的的建筑。其中积木就相当于Part，图纸相当于Director，而建筑就是Product了。当然，这样的例子还是会让人有些糊涂，比如说什么是Builder的实现呢？实际上在这个例子中，积木已经是形成的单元了，它就是Builder的产物而已。</div>
<div>面对这样一个看似简单的模式，初学者又会有这样的疑问，我们使用Builder的目的究竟是想返回不同的实例（都是Product的一种实现）还是根据返回另外的某种实例（只是某些Part没有builder）呢？让我们看看《设计模式：可复用面向对象软件的基础》一书中举的例子，书中Builder的三个实现类ASCIIConvertor , TexConverter 和TextWidgetConverter有各自的getResult的方法（getASCIIText, getTexText, getTextWidget），并且返回不同的类型。那么说明Builder返回的是后者，也就是另外的实例。</div>
<div>这时，我们又来对比一下Jdon网站板桥关于builder的举例，也就是关于汽车和汽车部件的例子（http://www.jdon.com/designpatterns/builder.htm），或者联想一下，在现实生活中，经常有这样的情况。比如说：一种汽车，有豪华版，舒适版，经济版等，都是一种产品，但是内部的部件搭配不同。那么他们是否又能使用Builder模式呢? 或者说，板桥所举的例子不是标准的Builder模式？</div>
<div>似乎不敢确定答案，好，我们再回头看看GOF关于builder模式的适用范围：</div>
<ul type="disc">
    <li style="TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt">当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 </span></li>
    <li style="TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt">当构造过程必须允许被构造的对象有不同的表示时。</span> </li>
</ul>
<div>其实这两种范围也就是描述了Builder模式的两种应用场景。第一种也就是板桥所举的关于汽车的例子，同样一种builder实例，可以根据Director来获得同一产品不同的实现，它关注的是分离对象的构造算法和组成部分。而第二种也就是原书中的例子，不同的builder获得不同的产品，它关注的是被构造对象的不同。</div>
<div>&nbsp;</div>
<div>这样一看，大家是否比较豁然开朗，对不同的Builder和Director关注度，会给我们带来不同的应用。而在绝大多数文章中，是没有提到这点的，或者说并没有清晰的谈到这点。</div>
<div>&nbsp;</div>
<div>正因为有两种不同侧重点的应用，所以当对问题分析不够透彻时，或者对模式侧重点不明晰时，我们往往会使用了不太合适的实现。这样，也就会让人感到一些奇怪和误解，同时也限制了调用者的可扩展性。（我们往往重视模式结构单元的可扩展性，确又忽略了调用者的扩展性。）</div>
<div>&nbsp;</div>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/70384#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Apr 2007 22:06:00 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/70384</link>
        <guid>http://phenix.javaeye.com/blog/70384</guid>
      </item>
      <item>
        <title>明天继续</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/70127" style="color:red;">http://phenix.javaeye.com/blog/70127</a>&nbsp;
          发表时间: 2007年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; 今天电脑被小姨子占着, 这个时候才让给我,太晚了,还是明天再继续吧. 看来为此承诺不是个简单 事情
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/70127#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Apr 2007 23:07:21 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/70127</link>
        <guid>http://phenix.javaeye.com/blog/70127</guid>
      </item>
      <item>
        <title>架构、框架、模式之轻松掌握设计模式（工厂模式）</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/69725" style="color:red;">http://phenix.javaeye.com/blog/69725</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>&nbsp;说起工厂模式，哈，几乎所有的开发人员都知道，但是，估计百分之八十以上的人用得比较滥（嘿嘿，注意哦，我用的是滥，而不是烂）。</div>
<div>&nbsp;好吧，先简单介绍一下工厂模式。在GOF中，工厂模式有两种，工厂与抽象工厂，而实际上，有三种，也就是简单工厂。</div>
<div>&nbsp;简单工厂一般由三种对象构成（工厂对象，抽象产品对象，具体产品对象），工厂模式一般由四种对象构成（工厂接口，产品抽象，具体工厂，具体产品），而抽象工厂则至少由7个以上对象了。（抽象工厂，两种以上不同的产品抽象对象，两种以上不同的工厂实现对象，两种以上不同的具体产品对象）。哈哈，复杂吧！来，我们用个很简单的实际生活中的例子来说明一下。简单工厂的例子是最常见的了，我们把抽象产品对象理解为一种产品，拿电脑来说事吧，945的主板就相当于抽象产品，ASUS就相当于简单工厂，为了针对不同的人群和需求，那么就可以偷工减料，也可以狠砸money，自然出来的产品就不同咯。对于使用者某种需要来说，关心的就是是否是945的板子，是否支持Intel的CPU。好，再让我们来看看工厂，DELL是发包商，它发现微星的板子比华硕的便宜一些，又同意是945的板子，那么它就会根据需要，调整不同的厂商来制作不同的板子，当然都是统一类型。这时候，朋友们可以发现了吧，简单工厂和工厂使用者上的不同，稍后再继续讨论这点。抽象工厂，神舟电脑公司就想贴牌，所以它要找些产品线丰富的厂商来生产，这样可以提高兼容性。好了，它需要一个抽象的工厂，这个工厂生产主板，显卡还有其他一些设备。但是呢，它经常需要根据实际的一些需要和条件来改变这个实际生产的厂商了。好了，华硕、微星接到了订单，他们担任实际的工厂了，产品嘛，就是显卡和主板，当然，两个厂商会根据需要生产出自己独特的产品，尽管型号一样。我们把角色对上位，大家可以一目了然了吧。</div>
<div style="TEXT-INDENT: 21.75pt">这里我们就带来了设计模式的一个重要的概念，既然面向对象是生活的抽象，事物都可以以对象描述，那么作为一种解决方案的模式，它就肯定表明了生活中常见的例子。那么好，为什么要用模式，哪些地方可以用这个模式。我们看看生活中的情况，也就一清二楚了。</div>
<div style="TEXT-INDENT: 21.75pt">我们可以看出，三种工厂模式使用的区别在于使用者上，使用者有不同的需求，那么就会需要调整相应的结构。在我们实际工作中，很多时候，实例对象的构造比较简单，所以很多时候简单工厂的应用比较广泛。但是，被滥用的也是它了。为什么呢，首先，我们需要了解为什么要使用它？其实这里有个隐含的概念，也就是单元。不知道朋友们是否发现，在每一个模式的图里只画出了内部的结构，而并没有画出调用者（最多也只是一个辅助的角色出现，只是为了说明调用的关系）。那么工厂模式运用的地方又是在哪里呢？根据前面的例子描述，我们可以看出，它是用在单元外部与单元内部的交互上了。这也就是所有创建模式的分类原因。我们这提这样一个问题，在单元内部是否可以使用工厂呢？单元又是一个多大的概念呢？我们说吧，在单元内部使用工厂（包括简单工厂）往往是种滥用，因为面向对象设计原则告诉我们，对象是可扩展，而不应被修改（也就是开闭原则）的。如果我们追求的是单元的复用，而不仅仅是某个类的复用，过多的使用工厂，只会是堆砌无用的代码而已。至于单元的大小又如何确定呢？想想你要复用的最小结构吧，那就是单元。好了，又会有朋友说，那如果不用工厂，我如果想改变一些实例，怎么办？嘿，我就告诉大家一个经典的设计，其实也就是在jdk实现中广泛运用的设计方式，Wrapper实现。 所有java的开发人员都非常清楚Map, Set , List ,这样的接口，在我们使用的时候，不会有哪位朋友去用工厂生产他们的实例吧？用的话，赶紧改哦。我们知道，常用的实现HashMap / HashSet / ArrayList都是可以修改的，线程不安全的。我们往往遇到一种尴尬，当我们返回List, Map , Set他们实例的时候很少考虑到他们也许会出现并发问题，他们也许会被别人修改内部的内容。怎么办？让我们看看Collections这个类吧， 在JDK1.4及以前的版本里，它提供了unmodified, synchronized的封装。传接口普通实例进去，返回接口的封装实例。对了，这就是非常经典的接口+（抽象类）+标准参考实现+封装实现。它就可以代替工厂在单元内部的使用者使用了。</div>
<div style="TEXT-INDENT: 21.75pt">那么好，在针对单元外部使用者来说，究竟是用工厂还是抽象工厂呢？他们的优缺点又在哪里呢？我们可以看看，对于工厂模式，一般必须由外部使用者指定它的工厂实例（变种的除外，到时候会讨论所谓变种的问题），当然对于内部实体来说，它可以供外部者更改或参考。对于在不考虑单元外部程序复用的情况下，它是不错的。而抽象工厂了，其实它的关注角度已经由产品移到了工厂上，同时它考虑了产品实例和工厂实例交叉的问题。换言之，其实就是将关系由一对多，变成了多对多。它的优点是提供了多种组合可能性。它存在的问题呢？想要增加一种产品的时候会发现它无法扩展了（这是很多人总结的一些问题，不过这个问题真的存在么？存在的话，那是不是就已经改变了抽象工厂模式应用的基础呢？离开了应用环境基础的话，又怎么回是抽象工厂模式本身的问题呢？） 一般来说，对于服务型对象的工厂，使用抽象工厂模式比较合适（有更好的扩展性）；而一般对于实体型对象的工厂呢，使用工厂模式就相对简单，也更加让人容易明了。</div>
<div style="TEXT-INDENT: 21.75pt">总结一下，世界上没有那种东西是放之四海皆准的真理，模式也一样。模式存在的本身是在某种环境下应用实践的总结，离开了对应的环境，所招来的骂名，我想它们也是会委屈滴&hellip;&hellip; 所以，朋友们，不要随便骂哪个模式如何烂，如何不好。不好的只是我们用滥了。</div>
<div>&nbsp;</div>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/69725#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Apr 2007 22:38:00 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/69725</link>
        <guid>http://phenix.javaeye.com/blog/69725</guid>
      </item>
      <item>
        <title>架构、框架、模式之轻松掌握设计模式（序言）</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/69723" style="color:red;">http://phenix.javaeye.com/blog/69723</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">本来下午写了一部分结果IEdown掉了，真够郁闷的，全没了.....</font></p>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; 很早就有一个想法，写一些关于架构、框架及设计模式的文章，结果总是时间不够，周末要上课，白天工作也忙，每周还得为两次training作准备。当然了，我这个人也是向来懒惰惯了，注册以来就没有留下过什么文字（主要总是自我感觉语言表达要远胜过文字了。）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 这茬事就淡忘了，自己也很久没有上javaeye来了。今天收到一个网友的质疑短信，问我所答应的事情怎么就没做了。惭愧惭愧，但是总得感谢他。所以也希望自己写的东西能够对他有些帮助，自然也包括其他的一些朋友。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 其实，网上关于设计模式也好，框架也好，架构设计也好，有许多许多的文章和帖子，但是看来，总感觉有这么一种趋向，举例的不少，解释的也不少，可是说明如何去使用，适应范围以及对比上来说，就相当的缺乏。同时，这样的东西往往是争议最多的，挺的也有，骂的也有。于是乎，许多新进来的朋友，包括想去探讨的朋友往往被言论所左右，也越来越看不清问题的实质了。跟风的也罢，冲动的也罢，置之不理的也罢。跟风的自然有跟风的理由，那么我所想做的，就是让那些置之不理的朋友能够回头再看看，换个角度再看看。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 我会从设计模式到框架设计到架构设计由初到高而写，争取做到每天一篇（由于周末要上课，所以不会写的了）。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 因为自身经验和知识结构的缘故，我所讨论的范围都是基于面向对象的商业系统开发，所以熟悉面向对象的原则，能够更快的接受和掌握了。我会尽量举例和对比，但是不会去编写所谓的sample代码，因为网上实在太多了。而且，实现并不是问题的根本。如果，网友们愿意提出自己的意见或者疑问，并提供相关代码进而讨论，那是更好不过的了。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 另外，我的文章中会引用一些别人的东西，因为实在人力所限，无法列出，哈哈，反正开放加免费的，希望作者不要见怪了。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 好了，不废话了，开始着手准备第一篇，工厂模式。</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/69723#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Apr 2007 20:37:00 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/69723</link>
        <guid>http://phenix.javaeye.com/blog/69723</guid>
      </item>
      <item>
        <title>赶紧换回我以前比较老实的头像算了</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/30835" style="color:red;">http://phenix.javaeye.com/blog/30835</a>&nbsp;
          发表时间: 2006年10月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有人说我这种照片太差了，<img src="/images/smiles/icon_sad.gif"/>，俺的结婚照啊～～～。<br />    算了，还是回到以前的老实模样算了。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/30835#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Oct 2006 20:08:07 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/30835</link>
        <guid>http://phenix.javaeye.com/blog/30835</guid>
      </item>
      <item>
        <title>终于等到我的精装The One了</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/30834" style="color:red;">http://phenix.javaeye.com/blog/30834</a>&nbsp;
          发表时间: 2006年10月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          嘿嘿，当当网的效率也太低了，等了好久，总算等到了我的&lt;The One>。前两天download了几个wma的文件先享受了一把，唉，对不起我们的公主啊！<br />    今天晚上回家，好好弥补弥补（要是家里有个好音响就更好了）。<br />    可惜这里的博客不能引用歌，否则，可以给大家共享共享了。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/30834#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Oct 2006 20:06:48 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/30834</link>
        <guid>http://phenix.javaeye.com/blog/30834</guid>
      </item>
      <item>
        <title>这两天收获不小</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/29427" style="color:red;">http://phenix.javaeye.com/blog/29427</a>&nbsp;
          发表时间: 2006年10月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚刚回到家，这两天真是有些累，连续两天16个课时的课，一门IT项目管理概论的课就差不多算上完了（怎么也都发发中大的牢骚，这个钱也骗得太那个了些。）<br />   不过话说回来，这两天却又让我收获不小。也不知道是老师觉得自己水平不够还是咋的，特定请来了一名人，嘿嘿，现在隆重介绍下：林锐。此人在软件工程界是相当有名声的一位（相信不少网友应该看过它的大学十年还有软件工程思想，当然，80后也许陌生点，有兴趣的朋友可以谷歌一把）。我们这门课等于算是它教了，虽然有些像讲座或者短期培训什么，不过课中的确是收获不少。<br />    作为一个技术人员，工作五六年的我现在算是处于一个迷茫彷徨的阶段了。人越来越看不清未来的方向。总是以技术为中心的思维在现实中总是受到一次又一次的冲击，而李宗盛的那句“最近比较烦，比较烦，后面总有一群天才在追赶”就有些在似乎未老的自己面前出现了。Ruby出来了，不懂;Ajax出来了也不懂；还有什么其他七七八八，如同Java也都升级到6了。一不小心，自己也就落到了后面。做it技术就是这种苦。而自己苦心追求的，努力的所谓技术却也被现实无情地打击。经历过的公司也好，项目也好，总是让自己迷茫而又失望，那些理想的技术如同气泡一样。软件业所做的似乎总是喜欢无止境地炒作闹腾。<br />     林锐（其实我应该尊称他为林博士或者林老师）也算是过来人，他谈到了技术，软件质量，CMM，软件过程，许多我们曾经为之激烈讨论，争辩甚至相互谩骂的东东被他轻而易举地解构得条理分明。他的主题也就是“商业决定一切，客户决定一切”。说来简单，但是对于纯粹的技术人员来说，要理解，要接受确实要花费一番周折的。<br />    课间休息时，和他聊了少许，关于他创业的目标与方向，更多是想了解他是怎么去在残酷的行业中生存的。只是因为同学们的兴趣太浓烈，我无法为就自己的迷茫与彷徨去疑问去探讨，甚是遗憾。<br />    回珠海的车上，我回溯着这两年来的所得所失，自己往往太纠缠于技术的细节。尤其想到了Javaeye上的一个明贴，大概是说“domain对象是否绝对不能传递到表示层”。现在看来，那时候确实有些傻，这世上又有何谓绝对不绝对呢？谁又决定了这一切呢？难道真是技术么？<br />    接下来，我该干什么？我又该去思考什么？是让这两天的收获如过眼云烟般消逝么？<br />    还好，我不得不交一篇3000字的论文，让它固化下来........
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/29427#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 22 Oct 2006 23:07:37 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/29427</link>
        <guid>http://phenix.javaeye.com/blog/29427</guid>
      </item>
      <item>
        <title>博客新手来了</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/25154" style="color:red;">http://phenix.javaeye.com/blog/25154</a>&nbsp;
          发表时间: 2006年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第一件事情，当然就是更新自己的个人信息，呵呵，再将那张青春年少的照片移走，换上今年的结婚照。新人来了，自然要有一个新面貌！<br />    希望这是好的开始。<img src="/images/smiles/icon_arrow.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/25154#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Sep 2006 15:47:31 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/25154</link>
        <guid>http://phenix.javaeye.com/blog/25154</guid>
      </item>
      <item>
        <title>着实汗颜</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/25153" style="color:red;">http://phenix.javaeye.com/blog/25153</a>&nbsp;
          发表时间: 2006年09月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          好久没有上JavaEye，上来发现界面全变了，哈哈，真是时代在进步，啥都在变。<br />   猛不留神，发现我的“大名”居然在名人堂的行列<img src="/images/smiles/icon_mad.gif"/>，有些惭愧啊！点击名字进去一看，原来链接到每个人的博客。<br />    汗颜，实在汗颜。我的里面空空如也，几篇发牢骚的文字还是两年多前写的。估计每个网友进来，都大大失望了一把。<br />    回想一下，虽然是做it的，我总是走在别人后面一把，什么个人主页啊，个人网站啊，博客啊，从来就没有过。人过得总是糊里糊涂的。<br />    再不写写，就实在有愧自己做IT的身份了，哈哈。同事们朋友们喜欢调侃我，称为“黄教授”，当然，有些谐音“黄夏留”教授的味道<img src="/images/smiles/icon_redface.gif"/>。不过俺可没那么猥琐。我可是为广大的Newcomers做了不少引路和培养的贡献的。<img src="/images/smiles/icon_lol.gif"/><br />   好，休息休息，想想怎么开始我的博客新人生活。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/25153#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Sep 2006 15:33:54 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/25153</link>
        <guid>http://phenix.javaeye.com/blog/25153</guid>
      </item>
      <item>
        <title>感觉论坛的一些问题</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22526" style="color:red;">http://phenix.javaeye.com/blog/22526</a>&nbsp;
          发表时间: 2004年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前一段项目比较忙，也就很少上来发贴了。最近几天看了不少帖子，也回了不少帖子。唉，感觉一点，现在的人好像都很冲动。<br />    论坛上学习气氛以及网友们的学习能力真是非常不错的，只是遗憾大家在讨论某个东西某项技术的时候，总喜欢盲目地把其他的东西批驳一番，有点动不动就喜欢革命的味道，而不是革新。联想起了当年的红卫兵了，呵呵。<br />    我估计自己在这个论坛上得罪的人不少，每次当一个帖子发出来受到万众欢呼的时候，自己总变成了一个反调论者。唉，也挨了不少骂。其实，我也深深知道，我所争论的大部分都是比较优秀的朋友，如potain , o6z，庄表伟，xanada，Trustno1等等，都是每个板块的管理级人士（还好至今没有和robbin，dlee，老曹），粗心不得。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22526#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Jul 2004 10:22:58 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22526</link>
        <guid>http://phenix.javaeye.com/blog/22526</guid>
      </item>
      <item>
        <title>烦死了，今天又没有睡成</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22430" style="color:red;">http://phenix.javaeye.com/blog/22430</a>&nbsp;
          发表时间: 2004年06月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这些日子忙着项目，很累，中午都要休息下。<br />    但是中午都习惯上网看看论坛，还是那个帖子，每次都忍不住想看，看完了，实在又不得不发些话。<br />    今天也是一样，本打算不发，但是看到有些朋友在概念上是那样的混沌，还对我哭笑不得，我真是，憋死了。唉，忍不住还是回了。<br />    我这个人还是容易被别人弄冲动弄急的，唉～～～～～～～～～～<br />    反正，今天又睡不成了，好烦～～～～～～～～～～～～
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22430#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jun 2004 13:59:01 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22430</link>
        <guid>http://phenix.javaeye.com/blog/22430</guid>
      </item>
      <item>
        <title>经过一番激烈地讨论，终于可以放下心，休息休息了</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22429" style="color:red;">http://phenix.javaeye.com/blog/22429</a>&nbsp;
          发表时间: 2004年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          唉，为了一个该死的PO和VO，同蛮多人成了“仇家”，激烈拼搏了一番，发的帖子都不下十张，反正道理、概念、例子也是举了不少。不过，大家依然如故，呵呵，这才发现，做IT的，都还真是比较牛一个，难得拖动啊，当然，也包括我自己。<br />    好累，此时的感觉就是如此，每天，紧张的工作，要关注项目的发展进度，要对项目的架构进行调整，要对重要的部分进行编码，还有许多琐碎的杂事。中午休息时，下班后，呵呵，再集中精神，跑进论坛，与大伙痛干一番，似乎来个酣畅淋漓倒是蛮爽快的事情。不过几天下来，呵呵，有些撑不住了。<br />    自己都二十六七的人了，还和读大学时参加辩论赛一样那么喜欢争论，脾气性子一样坐不住，离robbin，dlee们的境界还是差了蛮多的，汗颜啊<img src="/images/smiles/icon_redface.gif"/><br />    今天难得冷静了一番，主动提出休战，呵呵，蛮不符合我的性格的，也该慢慢沉稳沉稳些了。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22429#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Jun 2004 19:29:02 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22429</link>
        <guid>http://phenix.javaeye.com/blog/22429</guid>
      </item>
      <item>
        <title>终于决心删除了自己的相关信息</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22427" style="color:red;">http://phenix.javaeye.com/blog/22427</a>&nbsp;
          发表时间: 2004年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本来想上来多结交一些朋友，也出于个人的真实，于是把QQ号码、MSN都留了下来。<br />   不久，我的MSN上多了差不多二十位来自论坛的朋友。于是，我又多了一个责任，不耐其烦为他们解释并解决各类问题，终于，今天，自己有些烦了。我很感谢他们的真诚以及认同，不过，我实在抽不出太多时间去回答。<br />   前几天，看到robbin说不鼓励贴出自己的QQ和MSN，我发觉，我的确有些失误了。所以，今天，下定决心，把信息改了。<br />   由此也许怠慢了一些朋友，敬请原谅
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22427#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jun 2004 15:51:42 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22427</link>
        <guid>http://phenix.javaeye.com/blog/22427</guid>
      </item>
      <item>
        <title>今天第一次在论坛上说了TMD</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22425" style="color:red;">http://phenix.javaeye.com/blog/22425</a>&nbsp;
          发表时间: 2004年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我喜欢和人讨论问题，喜欢将自己的思想表达，激烈点，有时喜欢争论，有点好为人师的味道。<br />   不过一点，我喜欢和用脑去思考的人讨论，喜欢和用心去冥想的人讨论，我觉得，可以获取无穷的知识，品味一种心神交流的境界，那是一种享受。<br />   可是发现，有时的人未必然，他们在发现某些问题，或者说让其感到麻烦厌烦的问题的时候，首先不去思考大师们为什么这么想，有什么特别的地方，就喜欢直接对大师们批判一番，仿佛自己如同高人一般，发现了什么千古大疑类似。尽信书不如无书似乎成了他们的经典（且不想想，前提是尽信书啊，莫变成了从来就是反对书啊）。尤其两两之间，阿Q似的赞同反驳，似乎要创立另一个世界，另一个层面，浮躁之心油然其表。<br />   世界上，总要有不同的人罢，欣赏的，反感的，赞同的，反对的，这样才会精彩。不过，我实在不想在这种再没有任何升华的问题上纠缠过多。忍不住，骂了句国骂，想想也许不久，会被大家“批判”一番，呵呵，不过，做回真实的自己倒是好（千万不要进入我的公司，不然骂得更惨，哈哈，够野蛮、残酷的），也应了自己的签名了。<br />    世界一样，我，依然一样，轻狂如我，淡雅如我，激情如我，沉思如我。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22425#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 30 May 2004 23:17:58 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22425</link>
        <guid>http://phenix.javaeye.com/blog/22425</guid>
      </item>
      <item>
        <title>VO , 我们不需要么？</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22419" style="color:red;">http://phenix.javaeye.com/blog/22419</a>&nbsp;
          发表时间: 2004年05月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两天，在视线论坛就VO与PO的问题发了很多帖子，也看了一些网友的BLOG，围绕这个问题，大家你来我往了许久，许多的程序员或者设计人员，最擅长的是问这样做有什么好处，最喜欢的是反对是提出疑义，而不是去理解为什么要这样，原因是什么？所以兴致来了，就记录一下自己的感受和心态。<br />   DTO，一个衍生于VO的副产品，一个来自J2EE核心模式的一部分。其实它更多的只是描述了VO中的一部分职能：数据传输。它出现的目的是为了降低对数据存储的访问。如果单纯从DTO的角度去探讨其与PO的关系和作用，倒是仁者见仁，智者见智了。<br />   我想说的，是VO ，除了DTO描述的一部分外，它更为重要地是反映业务实体，反映客户（交互的人或者系统）所需要看到的对象。正因为在设计上业务实体与物理实体的分离，也就自然导致了VO与PO是两个完全不同的概念。很多网友都喜欢拘泥于他们中涵盖了似乎相同的字段，而这又能说明什么呢？（因为从理论上讲，PO与VO的字段是完全可以不同的）。我们讨论架构中多层的应用的时候，是怎么区分各层的呢？其实框架间和层之间的隔离是依靠两种：功能接口与通信介质。VO就是业务层与相邻各层的通信介质及数据表现介质。正因为有了VO的出现，就将业务实体的反映与界面表现的反映以及物理存储实体的反映隔离开来，也就真正实现了层的概念。否则，一通到底，还叫什么多层应用？（当然，那也许是一个好的web应用，但绝对称不上是一个多层架构应用的）。业务实体和物理实体间的关系是不确定的，业务实体取决于客观的业务情况，而物理实体就是取决与设计人员了。一个业务实体也许只是一个物理实体的部分（比如说我们看到一个人的简介的时候，是不包括人的全部信息的），一个业务实体也许和一个物理实体相同（比如说，一个人员信息的业务表现和物理表现一般都是相同的），一个业务实体也许包含（准确地讲应该是来自于）多个物理实体（比如说，一个订单，包括货币，客户，物品等各种各样的实体信息）。更为简单地讲，就是客户需要看到汽车（业务实体），而不需要了解汽车中的零配件（物理实体）是来自于何处。<br />    这样说来，VO的好处和作用已经相当明显了，它根本就不是PO所能代替和作用的（表面上看它起了简化的作用，实质上增加了系统间的耦合性，除非，作者对这种耦合性闭而不见），那么，VO，我们不需要么？<br />    采用多层的架构，我们必然会失去一些东西，如果这些东西不值得（比如就像某些文章说的“永远”不会存在什么分布式的时候），那么盲目地使用这样的架构是不太可取的；但是，如果在构建一个大型，稳健，具有高度扩展性的系统的时候，失去一些东西是需要的（比如说对象间相互数据转换的代销）。
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22419#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 May 2004 00:34:58 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22419</link>
        <guid>http://phenix.javaeye.com/blog/22419</guid>
      </item>
      <item>
        <title>我居然被删掉了19个帖子～～</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22409" style="color:red;">http://phenix.javaeye.com/blog/22409</a>&nbsp;
          发表时间: 2004年05月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          斑竹们真“狠”啊<img src="/images/smiles/icon_eek.gif"/>，最近相当忙，很久没有上来，今天一看，嚯嚯，被删掉了19个帖子，我记得上次上网看的时候才被删除了5张贴。夸张啊～～～~~`,才发现，斑竹们那么严格。<br />  唉，还是自己帖子的质量不够高啊<img src="/images/smiles/icon_redface.gif"/>，只可惜不知道被删除的帖子都是哪里的，要是有个记录就好了，自然也是前车之鉴啊～～～<br />  幸好，在blog里面，我还是可以发发牢骚，暂时没有被删贴的危险，呵呵，除非，服务器.......，不会那么不幸吧～～～～～～～～～～
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 May 2004 18:15:09 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22409</link>
        <guid>http://phenix.javaeye.com/blog/22409</guid>
      </item>
      <item>
        <title>关于Spring</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22399" style="color:red;">http://phenix.javaeye.com/blog/22399</a>&nbsp;
          发表时间: 2004年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我落伍很久了，对于hibernate只知皮毛，对于Spring也是听说。唉，工作的压力让我们没有时间去看书，让我们没有时间去研究东西。<br />   今天不知怎么回事，一时心情冲动，去了Spring的中文论坛，找了些文章看，突然茅塞顿开，我发现自己，呵呵，原来还算是聪明的。<br />   Spring的核心也就是Bean开发框架，一个轻量级的组件，半年前，我也曾想过做一个这样的东东（只可惜一直没有时间），也猛钻了一把EJB的原理和相关的设计模式。到现在我才发现，原来已经有一个这么好的东西在这里了，唉，其实自己有时也是蛮蠢的～～～～～～～～～<br />    一直以来，总是想自己做些东西，那样能够有些成就感，可是一回头，发现，TNND外国佬更加厉害，根本难以望其项背，反倒磨灭了自己不少时间。<br />    也搞不清楚自己技术究竟怎么样，反正是一大堆东西不懂，论坛上也老是莫名其妙的概念和名字，跟也跟不来。但，幸亏，思维还算不错，能想到一些东西，也能做些东西，总是万变不离其中吧！<br />    也就靠这些，让我继续在这个领域苟延残喘吧～～～～～～<img src="/images/smiles/icon_redface.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22399#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 May 2004 19:57:36 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22399</link>
        <guid>http://phenix.javaeye.com/blog/22399</guid>
      </item>
      <item>
        <title>第一次编写自己的blog</title>
        <author>凤舞凰扬</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://phenix.javaeye.com">凤舞凰扬</a>&nbsp;
          链接：<a href="http://phenix.javaeye.com/blog/22392" style="color:red;">http://phenix.javaeye.com/blog/22392</a>&nbsp;
          发表时间: 2004年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <img src="/images/smiles/icon_biggrin.gif"/>，第一次编写自己的blog，呵呵，也跟着大伙的屁股潮流了一把。<br />    今天，审计实时监控系统正式立项，我负责这个项目，唉，看着比财务、会计更加头疼的审计只是发呆。从澳门回来，算是一只到海里喝了几口水的土鳖吧，感觉是一身的抱负施展不开，就陷入无边际的复杂业务中，实在是苦！<br />   有时，看着dlee、robbin，好像很清闲似的，能写那么长的文章，我有时连看都感觉没有时间，有些朋友相信我，发些问题，也得压一压挤一挤给点个人小意见。唉，其实，自己好想静下来，认真做点东西，搞点东西。IT这玩意，也TM变得忒快了点，总感觉脑子不够用。<br />    想往上走，还得忍一忍，苦一苦，没有事，也多加加班，表现也要勤奋点，唉，这生活啊～～～～～～～～～～～～
          <br/>
          <span style="color:red;">
            <a href="http://phenix.javaeye.com/blog/22392#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 May 2004 20:08:08 +0800</pubDate>
        <link>http://phenix.javaeye.com/blog/22392</link>
        <guid>http://phenix.javaeye.com/blog/22392</guid>
      </item>
  </channel>
</rss>