﻿<?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-『一只小蚂蚁』的专栏-随笔分类-蚂蚁学模式</title><link>http://www.blogjava.net/qixiangnj/category/14807.html</link><description>&lt;strong&gt;生命不息，拼搏不止。&lt;/strong&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 06 Sep 2007 07:22:38 GMT</lastBuildDate><pubDate>Thu, 06 Sep 2007 07:22:38 GMT</pubDate><ttl>60</ttl><item><title>『蚂蚁学模式』之实例化策略（Strategy）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/09/06/142749.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Thu, 06 Sep 2007 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/09/06/142749.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/142749.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/09/06/142749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/142749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/142749.html</trackback:ping><description><![CDATA[策略模式属于对象的<strong>行为模式</strong>。<br />
其用意是<strong>针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换</strong>。<br />
<br />
<strong>策略模式的结构：</strong><br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/qixiangnj/18746/r_strategy.JPG" align="left" height="221" width="518" /><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
应当由客户端自己决定在什么情况下使用什么具体策略模式。<br />
<br />
策略模式不适合于处理同时嵌套多于一个算法的情形。<br />
<br />
<strong>何时使用？</strong><br />
1. 一个系统需要动态地让一个对象在许多行为中选择一种行为。<br />
2. 一个系统需要动态地在几种算法中选择一种。<br />
3. 一个系统的算法使用的数据不可以让客户端知道。<br />
4. 避免使用难以维护的多重条件选择语句。<br />
<br />
<strong>优点：</strong><br />
1. 提供了管理相关的算法族的办法。<br />
2. 提供了可以替换继承关系的办法。<br />
3. 可以避免使用多重条件转移语句。<br />
<br />
<strong>缺点：</strong><br />
1. 客户端必须知道所有的策略类，并自行决定使用哪一个策略类。<br />
2. 策略模式造成很多的策略类。<br />
<br />
<strong>与其他模式的关系：</strong><br />
建造（Builder）模式<br />
适配器（Adapter）模式<br />
享元（Flyweight）模式<br />
模板（Template）模式<br />
MVC模式<br />
装饰（Decorator）模式<br />
<br />
1. com.cleversoft.designpatterns.behavioral.strategy.Sorter.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortStrategy.sort();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;setSortStrategy(SortStrategy&nbsp;sort)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sortStrategy&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;sort;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;sortStrategy;<br />
}</span></div>
<br />
2. com.cleversoft.designpatterns.behavioral.strategy.SortStrategy.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">abstract</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">abstract</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort();<br />
}</span></div>
<br />
3. com.cleversoft.designpatterns.behavioral.strategy.RadixSort.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;RadixSort&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Radix&nbsp;Sort!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
4. com.cleversoft.designpatterns.behavioral.strategy.QuickSort.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;QuickSort&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Quick&nbsp;Sort!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
5. com.cleversoft.designpatterns.behavioral.strategy.HeapSort.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;HeapSort&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Heap&nbsp;Sort!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
6. com.cleversoft.designpatterns.behavioral.strategy.BubbleSort.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;BubbleSort&nbsp;</span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);">&nbsp;SortStrategy&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;sort()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Bubble&nbsp;Sort!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
7. com.cleversoft.designpatterns.behavioral.strategy.Client.java:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;com.cleversoft.designpatterns.behavioral.strategy;<br />
<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;Client&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;qixiang<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortStrategy&nbsp;sortStrategy&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;HeapSort();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sorter&nbsp;sorter&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Sorter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sorter.setSortStrategy(sortStrategy);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sorter.sort();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
<img src ="http://www.blogjava.net/qixiangnj/aggbug/142749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-09-06 08:42 <a href="http://www.blogjava.net/qixiangnj/archive/2007/09/06/142749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化门面（Facade）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/05/29/119824.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Tue, 29 May 2007 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/05/29/119824.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/119824.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/05/29/119824.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/119824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/119824.html</trackback:ping><description><![CDATA[门面模式是对象的结构模式。<br>门面模式要求<span style="font-weight: bold;">一个子系统的外部与其内部的通信必须通过一个统一的门面（Facade）对象进行</span>。<br><br><span style="font-weight: bold;">何时使用？<br></span>1. 为一个复杂子系统提供一个简单接口<br>2. 子系统的独立性<br>3. 层次化结构<br><br><span style="font-weight: bold;">对象图示意：</span><br><img alt="" src="http://www.blogjava.net/images/blogjava_net/qixiangnj/18746/r_facade.JPG"><br><br>1. com.cleversoft.designpatterns.facade.Alarm.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Alarm&nbsp;{<br>&nbsp;&nbsp;&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;activate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Activating&nbsp;the&nbsp;alarm.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;deactivate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Deactivating&nbsp;the&nbsp;alarm.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;ring()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Ring&nbsp;the&nbsp;alarm.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;stopRing()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Stop&nbsp;the&nbsp;alarm.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>2. com.cleversoft.designpatterns.facade.Camera.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Camera&nbsp;{<br>&nbsp;&nbsp;&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;turnOn()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Turning&nbsp;on&nbsp;the&nbsp;camera.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;turnOff()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Turning&nbsp;off&nbsp;the&nbsp;camera.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;rotate(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;degrees)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Rotating&nbsp;the&nbsp;camera&nbsp;by&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;degrees&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;degrees.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>3. com.cleversoft.designpatterns.facade.Light.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Light&nbsp;{<br>&nbsp;&nbsp;&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;turnOn()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Turning&nbsp;on&nbsp;the&nbsp;light.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;turnOff()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Turning&nbsp;off&nbsp;the&nbsp;light.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;changeBulb()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Changing&nbsp;the&nbsp;light-bulb.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>4. com.cleversoft.designpatterns.facade.Sensor.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Sensor&nbsp;{<br>&nbsp;&nbsp;&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;activate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Activating&nbsp;on&nbsp;the&nbsp;sensor.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;deactivate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Deactivating&nbsp;on&nbsp;the&nbsp;sensor.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;trigger()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">The&nbsp;sensor&nbsp;has&nbsp;been&nbsp;triggered.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>5. com.cleversoft.designpatterns.facade.SecurityFacade.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;SecurityFacade&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Camera&nbsp;camera1,&nbsp;camera2;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Light&nbsp;light1,&nbsp;light2,&nbsp;light3;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Sensor&nbsp;sensor;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Alarm&nbsp;alarm;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;SecurityFacade()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Camera();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Camera();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Light();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Light();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light3&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Light();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sensor&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Sensor();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Alarm();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;activate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera1.turnOn();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera2.turnOn();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light1.turnOn();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light2.turnOn();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light3.turnOn();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sensor.activate();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm.activate();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&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;deactivate()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera1.turnOff();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;camera2.turnOff();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light1.turnOff();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light2.turnOff();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;light3.turnOff();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sensor.deactivate();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm.deactivate();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>6. com.cleversoft.designpatterns.facade.Client.java:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;com.cleversoft.designpatterns.facade;<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Client&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;SecurityFacade&nbsp;security&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SecurityFacade();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;security.activate();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br><br>参考资料：<br>1. 《Java与模式》<br>   <img src ="http://www.blogjava.net/qixiangnj/aggbug/119824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-05-29 09:35 <a href="http://www.blogjava.net/qixiangnj/archive/2007/05/29/119824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化代理（Proxy）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/02/02/97687.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Fri, 02 Feb 2007 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/02/02/97687.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/97687.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/02/02/97687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/97687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/97687.html</trackback:ping><description><![CDATA[
		<strong>给某一个对象提供一个代理对象，并由代理对象控制对原对象的引用。<br /><br />代理的种类：<br /></strong>1. <strong><font color="#ff0000">远程（Remote）代理</font></strong>：为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中，也可是在另一台机器中。<br />2. <strong><font color="#ff0000">虚拟（Virtual）代理</font></strong>：根据需要创建一个资源消耗较大的对象，使得此对象只在需要时才会被真正创建。<br />3. <strong>Copy-on-Write代理</strong>：虚拟代理的一种。把复制（克隆）拖延到只有在客户端需要时，才真正采取行动。<br />4. <strong><font color="#ff0000">保护（Protect or Access）代理</font></strong>：控制对一个对象的访问，如果需要，可以给不同的用户提供不同级别的使用权限。<br />5. <strong>Cache代理</strong>：为某一个目标操作的结果提供临时的存储空间，以便多个客户端可以共享这些结果。<br />6. <strong>防火墙（Firewall）代理</strong>：保护目标，不让恶意用户接近。<br />7. <strong>同步化（Synchronization）代理</strong>：使几个用户能够同时使用一个对象而没有冲突。<br />8. <strong><font color="#ff0000">智能引用（Smart Reference）代理</font></strong>：当一个对象被引用时，提供一些额外的操作，比如将对此对象调用的次数记录下来等。<br /><br /><strong>示意类图</strong>：<br /><img src="http://www.blogjava.net/images/blogjava_net/qixiangnj/15671/r_proxyClass.JPG" align="left" /><br /><br /><br /><br /><br /><br /><br /><br />1. com.cleversoft.designpatterns.proxy.Subject.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.proxy;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_71_97_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_97_Open_Text.style.display='none'; Codehighlighter1_71_97_Closed_Image.style.display='inline'; Codehighlighter1_71_97_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_71_97_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_97_Closed_Text.style.display='none'; Codehighlighter1_71_97_Open_Image.style.display='inline'; Codehighlighter1_71_97_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Subject </span><span id="Codehighlighter1_71_97_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_71_97_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />2. com.cleversoft.designpatterns.proxy.RealSubject.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.proxy;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_90_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_166_Open_Text.style.display='none'; Codehighlighter1_90_166_Closed_Image.style.display='inline'; Codehighlighter1_90_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_90_166_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_166_Closed_Text.style.display='none'; Codehighlighter1_90_166_Open_Image.style.display='inline'; Codehighlighter1_90_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> RealSubject </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Subject </span><span id="Codehighlighter1_90_166_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_90_166_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_116_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_163_Open_Text.style.display='none'; Codehighlighter1_116_163_Closed_Image.style.display='inline'; Codehighlighter1_116_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_116_163_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_163_Closed_Text.style.display='none'; Codehighlighter1_116_163_Open_Image.style.display='inline'; Codehighlighter1_116_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request() </span><span id="Codehighlighter1_116_163_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_116_163_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">From real subject</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.proxy.ProxySubject.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.proxy;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_91_469_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_469_Open_Text.style.display='none'; Codehighlighter1_91_469_Closed_Image.style.display='inline'; Codehighlighter1_91_469_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_91_469_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_469_Closed_Text.style.display='none'; Codehighlighter1_91_469_Open_Image.style.display='inline'; Codehighlighter1_91_469_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ProxySubject </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Subject </span><span id="Codehighlighter1_91_469_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_91_469_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> RealSubject realSubject;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_151_154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_154_Open_Text.style.display='none'; Codehighlighter1_151_154_Closed_Image.style.display='inline'; Codehighlighter1_151_154_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_151_154_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_154_Closed_Text.style.display='none'; Codehighlighter1_151_154_Open_Image.style.display='inline'; Codehighlighter1_151_154_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ProxySubject() </span><span id="Codehighlighter1_151_154_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_151_154_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_180_312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_180_312_Open_Text.style.display='none'; Codehighlighter1_180_312_Closed_Image.style.display='inline'; Codehighlighter1_180_312_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_180_312_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_180_312_Closed_Text.style.display='none'; Codehighlighter1_180_312_Open_Image.style.display='inline'; Codehighlighter1_180_312_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request() </span><span id="Codehighlighter1_180_312_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_180_312_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        preRequest();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_226_266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_226_266_Open_Text.style.display='none'; Codehighlighter1_226_266_Closed_Image.style.display='inline'; Codehighlighter1_226_266_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_226_266_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_226_266_Closed_Text.style.display='none'; Codehighlighter1_226_266_Open_Image.style.display='inline'; Codehighlighter1_226_266_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (realSubject </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_226_266_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_226_266_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            realSubject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RealSubject();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        realSubject.request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        postRequest();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_343_390_Open_Image" onclick="this.style.display='none'; Codehighlighter1_343_390_Open_Text.style.display='none'; Codehighlighter1_343_390_Closed_Image.style.display='inline'; Codehighlighter1_343_390_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_343_390_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_343_390_Closed_Text.style.display='none'; Codehighlighter1_343_390_Open_Image.style.display='inline'; Codehighlighter1_343_390_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> postRequest() </span><span id="Codehighlighter1_343_390_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_343_390_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">From post request</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_420_466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_420_466_Open_Text.style.display='none'; Codehighlighter1_420_466_Closed_Image.style.display='inline'; Codehighlighter1_420_466_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_420_466_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_420_466_Closed_Text.style.display='none'; Codehighlighter1_420_466_Open_Image.style.display='inline'; Codehighlighter1_420_466_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> preRequest() </span><span id="Codehighlighter1_420_466_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_420_466_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">From pre request</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />4. com.cleversoft.designpatterns.proxy.Client.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.proxy;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_66_201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_201_Open_Text.style.display='none'; Codehighlighter1_66_201_Closed_Image.style.display='inline'; Codehighlighter1_66_201_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_66_201_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_201_Closed_Text.style.display='none'; Codehighlighter1_66_201_Open_Image.style.display='inline'; Codehighlighter1_66_201_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client </span><span id="Codehighlighter1_66_201_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_66_201_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Subject subject;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_142_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_198_Open_Text.style.display='none'; Codehighlighter1_142_198_Closed_Image.style.display='inline'; Codehighlighter1_142_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_142_198_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_198_Closed_Text.style.display='none'; Codehighlighter1_142_198_Open_Image.style.display='inline'; Codehighlighter1_142_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_142_198_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_142_198_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        subject </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ProxySubject();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        subject.request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />参考资料：<br />1. 《Java与模式》<img src ="http://www.blogjava.net/qixiangnj/aggbug/97687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-02-02 22:27 <a href="http://www.blogjava.net/qixiangnj/archive/2007/02/02/97687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化装饰（Decorator）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/01/31/97095.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 31 Jan 2007 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/01/31/97095.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/97095.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/01/31/97095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/97095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/97095.html</trackback:ping><description><![CDATA[又称包装（wrapper）模式。<br />以对客户端<strong><font color="#ff0000">透明</font></strong>（客户端并不会觉得对象在装饰前后有什么不同，老孙就是老孙！^_^）的方式扩展对象的功能，是继承关系的一个替代方案。<br /><br /><strong>何时使用？<br /></strong>1. 需要扩展一个类的功能，或给一个类增加附加责任。<br />2. 需要动态地给一个对象增加功能，这些功能可以再动态地撤销。<br />3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能，从而使继承关系变得不现实。<br /><br /><strong>优点：<br /></strong>1. 可以提供比继承更多的灵活性。<br />2. 通过使用不同的具体装饰类以及这些装饰类的排列组合，设计师可以创造出很多不同行为的组合。<br /><br /><strong>缺点：</strong><br />1. 会产生比使用继承关系更多的对象，会使得查错变得困难。<br /><br /><strong>类图示意：</strong><br /><img src="http://www.blogjava.net/images/blogjava_net/qixiangnj/15671/r_decoratorClass.jpg" align="left" /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />1. com.cleversoft.designpatterns.decorator.Widget.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_74_90_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_90_Open_Text.style.display='none'; Codehighlighter1_74_90_Closed_Image.style.display='inline'; Codehighlighter1_74_90_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_74_90_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_90_Closed_Text.style.display='none'; Codehighlighter1_74_90_Open_Image.style.display='inline'; Codehighlighter1_74_90_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Widget </span><span id="Codehighlighter1_74_90_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_74_90_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> draw();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />2. com.cleversoft.designpatterns.decorator.TextField.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_91_301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_301_Open_Text.style.display='none'; Codehighlighter1_91_301_Closed_Image.style.display='inline'; Codehighlighter1_91_301_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_91_301_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_301_Closed_Text.style.display='none'; Codehighlighter1_91_301_Open_Image.style.display='inline'; Codehighlighter1_91_301_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TextField </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Widget </span><span id="Codehighlighter1_91_301_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_91_301_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> width, height;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_163_212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_163_212_Open_Text.style.display='none'; Codehighlighter1_163_212_Closed_Image.style.display='inline'; Codehighlighter1_163_212_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_163_212_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_212_Closed_Text.style.display='none'; Codehighlighter1_163_212_Open_Image.style.display='inline'; Codehighlighter1_163_212_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> TextField(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> width, </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> height) </span><span id="Codehighlighter1_163_212_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_163_212_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.width </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> width;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.height </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> height;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_235_299_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_299_Open_Text.style.display='none'; Codehighlighter1_235_299_Closed_Image.style.display='inline'; Codehighlighter1_235_299_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_235_299_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_235_299_Closed_Text.style.display='none'; Codehighlighter1_235_299_Open_Image.style.display='inline'; Codehighlighter1_235_299_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> draw() </span><span id="Codehighlighter1_235_299_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_235_299_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TextField: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> width </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> height);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.decorator.Decorator.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_100_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_217_Open_Text.style.display='none'; Codehighlighter1_100_217_Closed_Image.style.display='inline'; Codehighlighter1_100_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_100_217_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_217_Closed_Text.style.display='none'; Codehighlighter1_100_217_Open_Image.style.display='inline'; Codehighlighter1_100_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Decorator </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Widget </span><span id="Codehighlighter1_100_217_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_100_217_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Widget wid;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_154_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_175_Open_Text.style.display='none'; Codehighlighter1_154_175_Closed_Image.style.display='inline'; Codehighlighter1_154_175_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_175_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_175_Closed_Text.style.display='none'; Codehighlighter1_154_175_Open_Image.style.display='inline'; Codehighlighter1_154_175_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Decorator(Widget wid) </span><span id="Codehighlighter1_154_175_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_154_175_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.wid </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> wid;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_198_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_198_215_Open_Text.style.display='none'; Codehighlighter1_198_215_Closed_Image.style.display='inline'; Codehighlighter1_198_215_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_198_215_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_198_215_Closed_Text.style.display='none'; Codehighlighter1_198_215_Open_Image.style.display='inline'; Codehighlighter1_198_215_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> draw() </span><span id="Codehighlighter1_198_215_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_198_215_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        wid.draw();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />4. com.cleversoft.designpatterns.decorator.BorderDecorator.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_97_241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_241_Open_Text.style.display='none'; Codehighlighter1_97_241_Closed_Image.style.display='inline'; Codehighlighter1_97_241_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_97_241_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_241_Closed_Text.style.display='none'; Codehighlighter1_97_241_Open_Image.style.display='inline'; Codehighlighter1_97_241_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BorderDecorator </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Decorator </span><span id="Codehighlighter1_97_241_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_97_241_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_136_153_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_153_Open_Text.style.display='none'; Codehighlighter1_136_153_Closed_Image.style.display='inline'; Codehighlighter1_136_153_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_136_153_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_136_153_Closed_Text.style.display='none'; Codehighlighter1_136_153_Open_Image.style.display='inline'; Codehighlighter1_136_153_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> BorderDecorator(Widget wid) </span><span id="Codehighlighter1_136_153_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_136_153_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">(wid);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_176_239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_239_Open_Text.style.display='none'; Codehighlighter1_176_239_Closed_Image.style.display='inline'; Codehighlighter1_176_239_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_176_239_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_239_Closed_Text.style.display='none'; Codehighlighter1_176_239_Open_Image.style.display='inline'; Codehighlighter1_176_239_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> draw() </span><span id="Codehighlighter1_176_239_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_176_239_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.draw();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">   BorderDecorator</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />5. com.cleversoft.designpatterns.decorator.ScrollDecorator.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_97_242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_242_Open_Text.style.display='none'; Codehighlighter1_97_242_Closed_Image.style.display='inline'; Codehighlighter1_97_242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_97_242_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_242_Closed_Text.style.display='none'; Codehighlighter1_97_242_Open_Image.style.display='inline'; Codehighlighter1_97_242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ScrollDecorator </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Decorator </span><span id="Codehighlighter1_97_242_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_97_242_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_136_153_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_153_Open_Text.style.display='none'; Codehighlighter1_136_153_Closed_Image.style.display='inline'; Codehighlighter1_136_153_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_136_153_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_136_153_Closed_Text.style.display='none'; Codehighlighter1_136_153_Open_Image.style.display='inline'; Codehighlighter1_136_153_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ScrollDecorator(Widget wid) </span><span id="Codehighlighter1_136_153_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_136_153_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">(wid);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_176_239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_239_Open_Text.style.display='none'; Codehighlighter1_176_239_Closed_Image.style.display='inline'; Codehighlighter1_176_239_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_176_239_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_239_Closed_Text.style.display='none'; Codehighlighter1_176_239_Open_Image.style.display='inline'; Codehighlighter1_176_239_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> draw() </span><span id="Codehighlighter1_176_239_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_176_239_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.draw();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">   ScrollDecorator</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />6. com.cleversoft.designpatterns.decorator.Client.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.decorator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_70_308_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_308_Open_Text.style.display='none'; Codehighlighter1_70_308_Closed_Image.style.display='inline'; Codehighlighter1_70_308_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_70_308_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_308_Closed_Text.style.display='none'; Codehighlighter1_70_308_Open_Image.style.display='inline'; Codehighlighter1_70_308_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client </span><span id="Codehighlighter1_70_308_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_70_308_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_113_306_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_306_Open_Text.style.display='none'; Codehighlighter1_113_306_Closed_Image.style.display='inline'; Codehighlighter1_113_306_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_113_306_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_306_Closed_Text.style.display='none'; Codehighlighter1_113_306_Open_Image.style.display='inline'; Codehighlighter1_113_306_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_113_306_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_113_306_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Widget w = new TextField(20, 10);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Widget b = new BorderDecorator(w);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> b.draw();</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Widget w </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BorderDecorator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ScrollDecorator(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TextField(</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">)));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        w.draw();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />参考资料：<br />1. 《Java与模式》<br />2. Design Patterns With Code<img src ="http://www.blogjava.net/qixiangnj/aggbug/97095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-01-31 23:05 <a href="http://www.blogjava.net/qixiangnj/archive/2007/01/31/97095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化合成（Composite）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/01/13/93580.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sat, 13 Jan 2007 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/01/13/93580.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/93580.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/01/13/93580.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/93580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/93580.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对象的结构模式，又称“部分－整体”模式。合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等对待。适用场合：1. 需要描述对象的部分和整体的等级结构。2. 需要客户端忽略掉个体构件和组合构件的区别。客户端必须平等对待所有的构件，包括个体构件和组合构件。优点：1. 合成模式可以很容易地增加新种类的构件。2. 使用合成模式可以使客户端变得很容易设计，...&nbsp;&nbsp;<a href='http://www.blogjava.net/qixiangnj/archive/2007/01/13/93580.html'>阅读全文</a><img src ="http://www.blogjava.net/qixiangnj/aggbug/93580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-01-13 11:54 <a href="http://www.blogjava.net/qixiangnj/archive/2007/01/13/93580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化缺省适配器（Default Adapter）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/01/10/92873.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 10 Jan 2007 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/01/10/92873.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/92873.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/01/10/92873.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/92873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/92873.html</trackback:ping><description><![CDATA[
		<p>
				<strong>缺省适配器模式</strong>：为一个接口提供缺省实现，这样子类型可以从这个缺省实现进行扩展，而不必从原有接口进行扩展。<br />“平庸化”的适配器模式。<br /><br />1. com.cleversoft.designpatterns.defaultadapter.InterfaceA.java:</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.cleversoft.designpatterns.defaultadapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_83_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_83_160_Open_Text.style.display='none'; Codehighlighter1_83_160_Closed_Image.style.display='inline'; Codehighlighter1_83_160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_83_160_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_160_Closed_Text.style.display='none'; Codehighlighter1_83_160_Open_Image.style.display='inline'; Codehighlighter1_83_160_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> InterfaceA </span>
				<span id="Codehighlighter1_83_160_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">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_83_160_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> a();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> b();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> c();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> d();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />2. com.cleversoft.designpatterns.defaultadapter.AdapterB.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.defaultadapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_108_201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_108_201_Open_Text.style.display='none'; Codehighlighter1_108_201_Closed_Image.style.display='inline'; Codehighlighter1_108_201_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_108_201_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_108_201_Closed_Text.style.display='none'; Codehighlighter1_108_201_Open_Image.style.display='inline'; Codehighlighter1_108_201_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> AdapterB </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> InterfaceA </span><span id="Codehighlighter1_108_201_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_108_201_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_127_130_Open_Image" onclick="this.style.display='none'; Codehighlighter1_127_130_Open_Text.style.display='none'; Codehighlighter1_127_130_Closed_Image.style.display='inline'; Codehighlighter1_127_130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_127_130_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_127_130_Closed_Text.style.display='none'; Codehighlighter1_127_130_Open_Image.style.display='inline'; Codehighlighter1_127_130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> a() </span><span id="Codehighlighter1_127_130_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_127_130_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_150_153_Open_Image" onclick="this.style.display='none'; Codehighlighter1_150_153_Open_Text.style.display='none'; Codehighlighter1_150_153_Closed_Image.style.display='inline'; Codehighlighter1_150_153_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_150_153_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_150_153_Closed_Text.style.display='none'; Codehighlighter1_150_153_Open_Image.style.display='inline'; Codehighlighter1_150_153_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> b() </span><span id="Codehighlighter1_150_153_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_150_153_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_173_176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_173_176_Open_Text.style.display='none'; Codehighlighter1_173_176_Closed_Image.style.display='inline'; Codehighlighter1_173_176_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_173_176_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_173_176_Closed_Text.style.display='none'; Codehighlighter1_173_176_Open_Image.style.display='inline'; Codehighlighter1_173_176_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> c() </span><span id="Codehighlighter1_173_176_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_173_176_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_196_199_Open_Image" onclick="this.style.display='none'; Codehighlighter1_196_199_Open_Text.style.display='none'; Codehighlighter1_196_199_Closed_Image.style.display='inline'; Codehighlighter1_196_199_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_196_199_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_196_199_Closed_Text.style.display='none'; Codehighlighter1_196_199_Open_Image.style.display='inline'; Codehighlighter1_196_199_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> d() </span><span id="Codehighlighter1_196_199_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_196_199_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.defaultadapter.ClassC.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.defaultadapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_92_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_197_Open_Text.style.display='none'; Codehighlighter1_92_197_Closed_Image.style.display='inline'; Codehighlighter1_92_197_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_92_197_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_197_Closed_Text.style.display='none'; Codehighlighter1_92_197_Open_Image.style.display='inline'; Codehighlighter1_92_197_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ClassC </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> AdapterB </span><span id="Codehighlighter1_92_197_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_92_197_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_111_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_143_Open_Text.style.display='none'; Codehighlighter1_111_143_Closed_Image.style.display='inline'; Codehighlighter1_111_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_111_143_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_143_Closed_Text.style.display='none'; Codehighlighter1_111_143_Open_Image.style.display='inline'; Codehighlighter1_111_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> a() </span><span id="Codehighlighter1_111_143_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_111_143_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a()</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_163_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_163_195_Open_Text.style.display='none'; Codehighlighter1_163_195_Closed_Image.style.display='inline'; Codehighlighter1_163_195_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_163_195_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_195_Closed_Text.style.display='none'; Codehighlighter1_163_195_Open_Image.style.display='inline'; Codehighlighter1_163_195_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> c() </span><span id="Codehighlighter1_163_195_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_163_195_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c()</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />参考资料：<br />1. 《Java与模式》<img src ="http://www.blogjava.net/qixiangnj/aggbug/92873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-01-10 12:26 <a href="http://www.blogjava.net/qixiangnj/archive/2007/01/10/92873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化适配器（Adapter）模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/01/09/92693.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Tue, 09 Jan 2007 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/01/09/92693.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/92693.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/01/09/92693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/92693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/92693.html</trackback:ping><description><![CDATA[
		<strong>结构模式</strong>：描述如何将<strong>类</strong>或者<strong>对象</strong>组合在一起形成更大的结构。<br /><br /><strong>适配器模式</strong>：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。<br /><strong>使用场合</strong>：<br />1）系统需要使用现有的类，而此类的接口不符合系统的需要。<br />2）想要建立一个可以重复使用的类，用于与一些彼此之间没有太大关联的一些类，包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。<br />3）（对对象的适配器模式而言）在设计里，需要改变多个已有的子类的接口，如果使用类的适配器模式，就要针对每一个子类做一个适配器类，而这不太实际。<br /><br /><br />类/对象的适配器模式：<br />1. com.cleversoft.designpatterns.adapter.Target.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.adapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_72_98_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_98_Open_Text.style.display='none'; Codehighlighter1_72_98_Closed_Image.style.display='inline'; Codehighlighter1_72_98_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_72_98_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_98_Closed_Text.style.display='none'; Codehighlighter1_72_98_Open_Image.style.display='inline'; Codehighlighter1_72_98_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Target </span><span id="Codehighlighter1_72_98_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_72_98_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />2. com.cleversoft.designpatterns.adapter.Adaptee.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.adapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_69_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_157_Open_Text.style.display='none'; Codehighlighter1_69_157_Closed_Image.style.display='inline'; Codehighlighter1_69_157_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_157_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_157_Closed_Text.style.display='none'; Codehighlighter1_69_157_Open_Image.style.display='inline'; Codehighlighter1_69_157_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Adaptee </span><span id="Codehighlighter1_69_157_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_69_157_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_102_155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_155_Open_Text.style.display='none'; Codehighlighter1_102_155_Closed_Image.style.display='inline'; Codehighlighter1_102_155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_102_155_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_102_155_Closed_Text.style.display='none'; Codehighlighter1_102_155_Open_Image.style.display='inline'; Codehighlighter1_102_155_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> specificRequest() </span><span id="Codehighlighter1_102_155_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_102_155_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Adaptee: SpecificRequest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.adapter.ClassAdapter.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.adapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_108_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_108_159_Open_Text.style.display='none'; Codehighlighter1_108_159_Closed_Image.style.display='inline'; Codehighlighter1_108_159_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_108_159_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_108_159_Closed_Text.style.display='none'; Codehighlighter1_108_159_Open_Image.style.display='inline'; Codehighlighter1_108_159_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ClassAdapter </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Adaptee </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Target </span><span id="Codehighlighter1_108_159_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_108_159_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_133_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_157_Open_Text.style.display='none'; Codehighlighter1_133_157_Closed_Image.style.display='inline'; Codehighlighter1_133_157_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_133_157_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_133_157_Closed_Text.style.display='none'; Codehighlighter1_133_157_Open_Image.style.display='inline'; Codehighlighter1_133_157_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request() </span><span id="Codehighlighter1_133_157_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_133_157_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        specificRequest();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />4. com.cleversoft.designpatterns.adapter.ObjectAdapter.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.adapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_93_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_250_Open_Text.style.display='none'; Codehighlighter1_93_250_Closed_Image.style.display='inline'; Codehighlighter1_93_250_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_93_250_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_250_Closed_Text.style.display='none'; Codehighlighter1_93_250_Open_Image.style.display='inline'; Codehighlighter1_93_250_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ObjectAdapter </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Target </span><span id="Codehighlighter1_93_250_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_93_250_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Adaptee adaptee;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_161_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_161_190_Open_Text.style.display='none'; Codehighlighter1_161_190_Closed_Image.style.display='inline'; Codehighlighter1_161_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_161_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_161_190_Closed_Text.style.display='none'; Codehighlighter1_161_190_Open_Image.style.display='inline'; Codehighlighter1_161_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ObjectAdapter(Adaptee adaptee) </span><span id="Codehighlighter1_161_190_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_161_190_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.adaptee </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> adaptee;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_216_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_216_248_Open_Text.style.display='none'; Codehighlighter1_216_248_Closed_Image.style.display='inline'; Codehighlighter1_216_248_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_216_248_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_216_248_Closed_Text.style.display='none'; Codehighlighter1_216_248_Open_Image.style.display='inline'; Codehighlighter1_216_248_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> request() </span><span id="Codehighlighter1_216_248_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_216_248_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        adaptee.specificRequest();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />5. com.cleversoft.designpatterns.adapter.Client.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.adapter;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_68_395_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_395_Open_Text.style.display='none'; Codehighlighter1_68_395_Closed_Image.style.display='inline'; Codehighlighter1_68_395_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_68_395_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_395_Closed_Text.style.display='none'; Codehighlighter1_68_395_Open_Image.style.display='inline'; Codehighlighter1_68_395_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Client </span><span id="Codehighlighter1_68_395_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_68_395_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_111_392_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_392_Open_Text.style.display='none'; Codehighlighter1_111_392_Closed_Image.style.display='inline'; Codehighlighter1_111_392_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_111_392_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_392_Closed_Text.style.display='none'; Codehighlighter1_111_392_Open_Image.style.display='inline'; Codehighlighter1_111_392_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_111_392_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_111_392_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object Adapter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Adaptee adaptee </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Adaptee();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ObjectAdapter objectAdapter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ObjectAdapter(adaptee);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        objectAdapter.request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Class Adapter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ClassAdapter classAdapter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassAdapter();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        classAdapter.request();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />参考资料：<br />1. 《Java与模式》<br />2. Thinking in Patterns<img src ="http://www.blogjava.net/qixiangnj/aggbug/92693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-01-09 18:47 <a href="http://www.blogjava.net/qixiangnj/archive/2007/01/09/92693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化原型模式</title><link>http://www.blogjava.net/qixiangnj/archive/2007/01/02/91449.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Tue, 02 Jan 2007 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2007/01/02/91449.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/91449.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2007/01/02/91449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/91449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/91449.html</trackback:ping><description><![CDATA[
		<p>
				<strong>用意：</strong>通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的办法创建出更多同类型的对象。<br /><br />1. com.cleversoft.designpatterns.prototype.Prototype.java:</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.cleversoft.designpatterns.prototype;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_70_127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_127_Open_Text.style.display='none'; Codehighlighter1_70_127_Closed_Image.style.display='inline'; Codehighlighter1_70_127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_70_127_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_127_Closed_Text.style.display='none'; Codehighlighter1_70_127_Open_Image.style.display='inline'; Codehighlighter1_70_127_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> Prototype </span>
				<span id="Codehighlighter1_70_127_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">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_70_127_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Object clone();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    String getName();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> execute();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />2. com.cleversoft.designpatterns.prototype.This.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.prototype;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_82_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_249_Open_Text.style.display='none'; Codehighlighter1_82_249_Closed_Image.style.display='inline'; Codehighlighter1_82_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_249_Closed_Text.style.display='none'; Codehighlighter1_82_249_Open_Image.style.display='inline'; Codehighlighter1_82_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> This </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Prototype </span><span id="Codehighlighter1_82_249_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_82_249_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_107_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_131_Open_Text.style.display='none'; Codehighlighter1_107_131_Closed_Image.style.display='inline'; Codehighlighter1_107_131_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_107_131_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_131_Closed_Text.style.display='none'; Codehighlighter1_107_131_Open_Image.style.display='inline'; Codehighlighter1_107_131_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span id="Codehighlighter1_107_131_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_107_131_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> This();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_159_179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_159_179_Open_Text.style.display='none'; Codehighlighter1_159_179_Closed_Image.style.display='inline'; Codehighlighter1_159_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_159_179_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_159_179_Closed_Text.style.display='none'; Codehighlighter1_159_179_Open_Image.style.display='inline'; Codehighlighter1_159_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_159_179_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_159_179_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_205_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_247_Open_Text.style.display='none'; Codehighlighter1_205_247_Closed_Image.style.display='inline'; Codehighlighter1_205_247_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_205_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_205_247_Closed_Text.style.display='none'; Codehighlighter1_205_247_Open_Image.style.display='inline'; Codehighlighter1_205_247_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> execute() </span><span id="Codehighlighter1_205_247_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_205_247_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This: execute</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.prototype.That.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.prototype;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_82_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_249_Open_Text.style.display='none'; Codehighlighter1_82_249_Closed_Image.style.display='inline'; Codehighlighter1_82_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_249_Closed_Text.style.display='none'; Codehighlighter1_82_249_Open_Image.style.display='inline'; Codehighlighter1_82_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> That </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Prototype </span><span id="Codehighlighter1_82_249_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_82_249_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_107_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_131_Open_Text.style.display='none'; Codehighlighter1_107_131_Closed_Image.style.display='inline'; Codehighlighter1_107_131_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_107_131_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_131_Closed_Text.style.display='none'; Codehighlighter1_107_131_Open_Image.style.display='inline'; Codehighlighter1_107_131_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object clone() </span><span id="Codehighlighter1_107_131_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_107_131_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> That();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_159_179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_159_179_Open_Text.style.display='none'; Codehighlighter1_159_179_Closed_Image.style.display='inline'; Codehighlighter1_159_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_159_179_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_159_179_Closed_Text.style.display='none'; Codehighlighter1_159_179_Open_Image.style.display='inline'; Codehighlighter1_159_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_159_179_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_159_179_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">That</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_205_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_247_Open_Text.style.display='none'; Codehighlighter1_205_247_Closed_Image.style.display='inline'; Codehighlighter1_205_247_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_205_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_205_247_Closed_Text.style.display='none'; Codehighlighter1_205_247_Open_Image.style.display='inline'; Codehighlighter1_205_247_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> execute() </span><span id="Codehighlighter1_205_247_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_205_247_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">That: execute</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />4. com.cleversoft.designpatterns.prototype.PrototypesModule.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.prototype;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_73_474_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_474_Open_Text.style.display='none'; Codehighlighter1_73_474_Closed_Image.style.display='inline'; Codehighlighter1_73_474_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_73_474_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_474_Closed_Text.style.display='none'; Codehighlighter1_73_474_Open_Image.style.display='inline'; Codehighlighter1_73_474_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> PrototypesModule </span><span id="Codehighlighter1_73_474_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_73_474_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Prototype[] prototypes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Prototype[</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> total </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_215_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_215_247_Open_Text.style.display='none'; Codehighlighter1_215_247_Closed_Image.style.display='inline'; Codehighlighter1_215_247_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_215_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_215_247_Closed_Text.style.display='none'; Codehighlighter1_215_247_Open_Image.style.display='inline'; Codehighlighter1_215_247_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> addPrototype(Prototype obj) </span><span id="Codehighlighter1_215_247_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_215_247_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        prototypes[total</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> obj;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_298_472_Open_Image" onclick="this.style.display='none'; Codehighlighter1_298_472_Open_Text.style.display='none'; Codehighlighter1_298_472_Closed_Image.style.display='inline'; Codehighlighter1_298_472_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_298_472_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_298_472_Closed_Text.style.display='none'; Codehighlighter1_298_472_Open_Image.style.display='inline'; Codehighlighter1_298_472_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Object findAndClone(String name) </span><span id="Codehighlighter1_298_472_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_298_472_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> total; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (prototypes[i].getName().equals(name))<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> prototypes[i].clone();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(name </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> not found</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />5. com.cleversoft.designpatterns.prototype.Main.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.prototype;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_68_558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_558_Open_Text.style.display='none'; Codehighlighter1_68_558_Closed_Image.style.display='inline'; Codehighlighter1_68_558_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_68_558_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_558_Closed_Text.style.display='none'; Codehighlighter1_68_558_Open_Image.style.display='inline'; Codehighlighter1_68_558_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_68_558_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_68_558_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_113_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_113_206_Open_Text.style.display='none'; Codehighlighter1_113_206_Closed_Image.style.display='inline'; Codehighlighter1_113_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_113_206_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_206_Closed_Text.style.display='none'; Codehighlighter1_113_206_Open_Image.style.display='inline'; Codehighlighter1_113_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> initializePrototypes() </span><span id="Codehighlighter1_113_206_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_113_206_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        PrototypesModule.addPrototype(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> This());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        PrototypesModule.addPrototype(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> That());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_249_556_Open_Image" onclick="this.style.display='none'; Codehighlighter1_249_556_Open_Text.style.display='none'; Codehighlighter1_249_556_Closed_Image.style.display='inline'; Codehighlighter1_249_556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_249_556_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_249_556_Closed_Text.style.display='none'; Codehighlighter1_249_556_Open_Image.style.display='inline'; Codehighlighter1_249_556_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_249_556_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_249_556_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        initializePrototypes();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Object[] objects </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> total </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_371_479_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_479_Open_Text.style.display='none'; Codehighlighter1_371_479_Closed_Image.style.display='inline'; Codehighlighter1_371_479_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_371_479_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_371_479_Closed_Text.style.display='none'; Codehighlighter1_371_479_Open_Image.style.display='inline'; Codehighlighter1_371_479_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> args.length; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_371_479_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_371_479_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            objects[total] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> PrototypesModule.findAndClone(args[i]);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (objects[total] </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                total</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> total; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ((Prototype) objects[i]).execute();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />参考资料：<br />1. 《Java与模式》<br />2. <a href="http://terrylee.cnblogs.com/archive/2006/01/16/317896.html">http://terrylee.cnblogs.com/archive/2006/01/16/317896.html</a><br />3. Design Patterns With Code<br />4. Thinking in Patterns<img src ="http://www.blogjava.net/qixiangnj/aggbug/91449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2007-01-02 21:31 <a href="http://www.blogjava.net/qixiangnj/archive/2007/01/02/91449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化建造者模式</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/27/90264.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 27 Dec 2006 03:56:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/27/90264.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/90264.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/27/90264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/90264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/90264.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来，从而可以使一个建造过程生成具有不同的内部表象的产品对象。UML图示：1. com.cleversoft.designpatterns.builder2.PostalClert.java:package com.cleversoft.designpatterns.builder2;public class PostalClert {    ...&nbsp;&nbsp;<a href='http://www.blogjava.net/qixiangnj/archive/2006/12/27/90264.html'>阅读全文</a><img src ="http://www.blogjava.net/qixiangnj/aggbug/90264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-27 11:56 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/27/90264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化单例模式（二）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/23/89666.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sat, 23 Dec 2006 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/23/89666.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/89666.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/23/89666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/89666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/89666.html</trackback:ping><description><![CDATA[前面说了单例模式，这次说说单例模式的推广——多例模式。<br /><br /><strong>有上限多例模式<br /></strong>com.cleversoft.designpatterns.multiton.Die.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.multiton;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Random;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Date;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_115_572_Open_Image" onclick="this.style.display='none'; Codehighlighter1_115_572_Open_Text.style.display='none'; Codehighlighter1_115_572_Closed_Image.style.display='inline'; Codehighlighter1_115_572_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_115_572_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_115_572_Closed_Text.style.display='none'; Codehighlighter1_115_572_Open_Image.style.display='inline'; Codehighlighter1_115_572_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Die </span><span id="Codehighlighter1_115_572_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_115_572_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Die die1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Die();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Die die2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Die();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_210_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_210_213_Open_Text.style.display='none'; Codehighlighter1_210_213_Closed_Image.style.display='inline'; Codehighlighter1_210_213_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_210_213_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_210_213_Closed_Text.style.display='none'; Codehighlighter1_210_213_Open_Image.style.display='inline'; Codehighlighter1_210_213_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Die() </span><span id="Codehighlighter1_210_213_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_210_213_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_261_334_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_334_Open_Text.style.display='none'; Codehighlighter1_261_334_Closed_Image.style.display='inline'; Codehighlighter1_261_334_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_261_334_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_261_334_Closed_Text.style.display='none'; Codehighlighter1_261_334_Open_Image.style.display='inline'; Codehighlighter1_261_334_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Die getInstance(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> whichOne) </span><span id="Codehighlighter1_261_334_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_261_334_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_284_304_Open_Image" onclick="this.style.display='none'; Codehighlighter1_284_304_Open_Text.style.display='none'; Codehighlighter1_284_304_Closed_Image.style.display='inline'; Codehighlighter1_284_304_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_284_304_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_284_304_Closed_Text.style.display='none'; Codehighlighter1_284_304_Open_Image.style.display='inline'; Codehighlighter1_284_304_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (whichOne </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_284_304_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_284_304_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> die1;<br /><img id="Codehighlighter1_311_331_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_331_Open_Text.style.display='none'; Codehighlighter1_311_331_Closed_Image.style.display='inline'; Codehighlighter1_311_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_311_331_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_311_331_Closed_Text.style.display='none'; Codehighlighter1_311_331_Open_Image.style.display='inline'; Codehighlighter1_311_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_311_331_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_311_331_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> die2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_369_569_Open_Image" onclick="this.style.display='none'; Codehighlighter1_369_569_Open_Text.style.display='none'; Codehighlighter1_369_569_Closed_Image.style.display='inline'; Codehighlighter1_369_569_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_369_569_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_369_569_Closed_Text.style.display='none'; Codehighlighter1_369_569_Open_Image.style.display='inline'; Codehighlighter1_369_569_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> dice() </span><span id="Codehighlighter1_369_569_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_369_569_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Date d </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Random r </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Random(d.getTime());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> r.nextInt();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Math.abs(value);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> value </span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        value </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(value);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> value;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />com.cleversoft.designpatterns.multiton.Main.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.multiton;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_67_257_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_257_Open_Text.style.display='none'; Codehighlighter1_67_257_Closed_Image.style.display='inline'; Codehighlighter1_67_257_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_257_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_257_Closed_Text.style.display='none'; Codehighlighter1_67_257_Open_Image.style.display='inline'; Codehighlighter1_67_257_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_67_257_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_67_257_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Die die1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Die die2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_163_255_Open_Image" onclick="this.style.display='none'; Codehighlighter1_163_255_Open_Text.style.display='none'; Codehighlighter1_163_255_Closed_Image.style.display='inline'; Codehighlighter1_163_255_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_163_255_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_255_Closed_Text.style.display='none'; Codehighlighter1_163_255_Open_Image.style.display='inline'; Codehighlighter1_163_255_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_163_255_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_163_255_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        die1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Die.getInstance(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        die2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Die.getInstance(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        die1.dice();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        die2.dice();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><strong>无上限多例模式<br /></strong>比较合适的例子就是在应用程序中的“多语言支持”和序列键生成器。<br /><br /><br />参考资料：《Java与模式》<img src ="http://www.blogjava.net/qixiangnj/aggbug/89666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-23 16:27 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/23/89666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化单例模式（一）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/20/89160.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 20 Dec 2006 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/20/89160.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/89160.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/20/89160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/89160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/89160.html</trackback:ping><description><![CDATA[饿汉式单例<br />com.cleversoft.designpatterns.singleton1.Singleton.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.singleton1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_51_81_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_81_Open_Text.style.display='none'; Codehighlighter1_51_81_Closed_Image.style.display='inline'; Codehighlighter1_51_81_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_81_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_81_Closed_Text.style.display='none'; Codehighlighter1_51_81_Open_Image.style.display='inline'; Codehighlighter1_51_81_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_51_81_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_51_81_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Hungry Singleton<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_106_335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_335_Open_Text.style.display='none'; Codehighlighter1_106_335_Closed_Image.style.display='inline'; Codehighlighter1_106_335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_106_335_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_335_Closed_Text.style.display='none'; Codehighlighter1_106_335_Open_Image.style.display='inline'; Codehighlighter1_106_335_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Singleton </span><span id="Codehighlighter1_106_335_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_106_335_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Singleton singleton </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Singleton();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_186_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_186_189_Open_Text.style.display='none'; Codehighlighter1_186_189_Closed_Image.style.display='inline'; Codehighlighter1_186_189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_186_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_189_Closed_Text.style.display='none'; Codehighlighter1_186_189_Open_Image.style.display='inline'; Codehighlighter1_186_189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Singleton() </span><span id="Codehighlighter1_186_189_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_186_189_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_231_254_Open_Image" onclick="this.style.display='none'; Codehighlighter1_231_254_Open_Text.style.display='none'; Codehighlighter1_231_254_Closed_Image.style.display='inline'; Codehighlighter1_231_254_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_231_254_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_231_254_Closed_Text.style.display='none'; Codehighlighter1_231_254_Open_Image.style.display='inline'; Codehighlighter1_231_254_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Singleton getInstance() </span><span id="Codehighlighter1_231_254_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_231_254_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> singleton;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_285_333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_285_333_Open_Text.style.display='none'; Codehighlighter1_285_333_Closed_Image.style.display='inline'; Codehighlighter1_285_333_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_285_333_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_285_333_Closed_Text.style.display='none'; Codehighlighter1_285_333_Open_Image.style.display='inline'; Codehighlighter1_285_333_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String demoMethod() </span><span id="Codehighlighter1_285_333_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_285_333_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is a hungry singleton demo!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />com.cleversoft.designpatterns.singleton1.Main.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.singleton1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_69_241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_241_Open_Text.style.display='none'; Codehighlighter1_69_241_Closed_Image.style.display='inline'; Codehighlighter1_69_241_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_241_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_241_Closed_Text.style.display='none'; Codehighlighter1_69_241_Open_Image.style.display='inline'; Codehighlighter1_69_241_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_69_241_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_69_241_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_73_96_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_96_Open_Text.style.display='none'; Codehighlighter1_73_96_Closed_Image.style.display='inline'; Codehighlighter1_73_96_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_73_96_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_96_Closed_Text.style.display='none'; Codehighlighter1_73_96_Open_Image.style.display='inline'; Codehighlighter1_73_96_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_73_96_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_73_96_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_138_238_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_238_Open_Text.style.display='none'; Codehighlighter1_138_238_Closed_Image.style.display='inline'; Codehighlighter1_138_238_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_138_238_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_138_238_Closed_Text.style.display='none'; Codehighlighter1_138_238_Open_Image.style.display='inline'; Codehighlighter1_138_238_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_138_238_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_138_238_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        System.out.println(Singleton.getInstance().demoMethod());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />懒汉式单例<br />com.cleversoft.designpatterns.singleton2.LazySingleton.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.singleton2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_51_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_79_Open_Text.style.display='none'; Codehighlighter1_51_79_Closed_Image.style.display='inline'; Codehighlighter1_51_79_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_51_79_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_79_Closed_Text.style.display='none'; Codehighlighter1_51_79_Open_Image.style.display='inline'; Codehighlighter1_51_79_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_51_79_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_51_79_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Lazy Singleton<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_108_348_Open_Image" onclick="this.style.display='none'; Codehighlighter1_108_348_Open_Text.style.display='none'; Codehighlighter1_108_348_Closed_Image.style.display='inline'; Codehighlighter1_108_348_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_108_348_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_108_348_Closed_Text.style.display='none'; Codehighlighter1_108_348_Open_Image.style.display='inline'; Codehighlighter1_108_348_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LazySingleton </span><span id="Codehighlighter1_108_348_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_108_348_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000"> instance_flag </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_175_178_Open_Image" onclick="this.style.display='none'; Codehighlighter1_175_178_Open_Text.style.display='none'; Codehighlighter1_175_178_Closed_Image.style.display='inline'; Codehighlighter1_175_178_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_175_178_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_175_178_Closed_Text.style.display='none'; Codehighlighter1_175_178_Open_Image.style.display='inline'; Codehighlighter1_175_178_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> LazySingleton() </span><span id="Codehighlighter1_175_178_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_175_178_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_237_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_237_345_Open_Text.style.display='none'; Codehighlighter1_237_345_Closed_Image.style.display='inline'; Codehighlighter1_237_345_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_237_345_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_237_345_Closed_Text.style.display='none'; Codehighlighter1_237_345_Open_Image.style.display='inline'; Codehighlighter1_237_345_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> LazySingleton getInstance() </span><span id="Codehighlighter1_237_345_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_237_345_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_261_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_321_Open_Text.style.display='none'; Codehighlighter1_261_321_Closed_Image.style.display='inline'; Codehighlighter1_261_321_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_261_321_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_261_321_Closed_Text.style.display='none'; Codehighlighter1_261_321_Open_Image.style.display='inline'; Codehighlighter1_261_321_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">instance_flag) </span><span id="Codehighlighter1_261_321_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_261_321_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            instance_flag </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LazySingleton();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />com.cleversoft.designpatterns.singleton2.Main.java:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.singleton2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_69_630_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_630_Open_Text.style.display='none'; Codehighlighter1_69_630_Closed_Image.style.display='inline'; Codehighlighter1_69_630_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_630_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_630_Closed_Text.style.display='none'; Codehighlighter1_69_630_Open_Image.style.display='inline'; Codehighlighter1_69_630_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_69_630_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_69_630_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_73_96_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_96_Open_Text.style.display='none'; Codehighlighter1_73_96_Closed_Image.style.display='inline'; Codehighlighter1_73_96_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_73_96_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_96_Closed_Text.style.display='none'; Codehighlighter1_73_96_Open_Image.style.display='inline'; Codehighlighter1_73_96_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_73_96_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_73_96_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_138_627_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_627_Open_Text.style.display='none'; Codehighlighter1_138_627_Closed_Image.style.display='inline'; Codehighlighter1_138_627_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_138_627_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_138_627_Closed_Text.style.display='none'; Codehighlighter1_138_627_Open_Image.style.display='inline'; Codehighlighter1_138_627_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_138_627_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_138_627_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        LazySingleton ls1, ls2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Start to get first Instance<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ls1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> LazySingleton.getInstance();<br /><img id="Codehighlighter1_314_375_Open_Image" onclick="this.style.display='none'; Codehighlighter1_314_375_Open_Text.style.display='none'; Codehighlighter1_314_375_Closed_Image.style.display='inline'; Codehighlighter1_314_375_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_314_375_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_314_375_Closed_Text.style.display='none'; Codehighlighter1_314_375_Open_Image.style.display='inline'; Codehighlighter1_314_375_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (ls1 </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_314_375_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_314_375_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is the first Instance!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Start to get second Instance<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ls2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> LazySingleton.getInstance();<br /><img id="Codehighlighter1_492_551_Open_Image" onclick="this.style.display='none'; Codehighlighter1_492_551_Open_Text.style.display='none'; Codehighlighter1_492_551_Closed_Image.style.display='inline'; Codehighlighter1_492_551_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_492_551_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_492_551_Closed_Text.style.display='none'; Codehighlighter1_492_551_Open_Image.style.display='inline'; Codehighlighter1_492_551_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (ls2 </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_492_551_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_492_551_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is the second Instance!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_559_621_Open_Image" onclick="this.style.display='none'; Codehighlighter1_559_621_Open_Text.style.display='none'; Codehighlighter1_559_621_Closed_Image.style.display='inline'; Codehighlighter1_559_621_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_559_621_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_559_621_Closed_Text.style.display='none'; Codehighlighter1_559_621_Open_Image.style.display='inline'; Codehighlighter1_559_621_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">else</span><span id="Codehighlighter1_559_621_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_559_621_Open_Text"><span style="COLOR: #000000">{            <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">You can just get 1 Instance!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />引用：<br /><font face="Arial" size="2"> &gt;强烈建议大家不要再花时间在实现双重检查成例上<br />是这样，不必在这上面钻牛角尖，而且<strong>单例模式在实际应用中已经逐步被Ioc容器替代，实用价值不高</strong>。（<a title="彭晨阳(网名: 板桥里人)" href="http://www.jdon.com/jive/profile.jsp?user=2"><b><font size="3">banq</font></b></a>）<br /></font>(<a href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=23890">http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=23890</a>)<br /><br />参考资料：<br />1. 《Java与模式》<br />2. <a href="http://www.java2s.com">http://www.java2s.com</a><br /><img src ="http://www.blogjava.net/qixiangnj/aggbug/89160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-20 22:58 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/20/89160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化抽象工厂模式及碎言</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/18/88650.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Mon, 18 Dec 2006 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/18/88650.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/88650.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/18/88650.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/88650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/88650.html</trackback:ping><description><![CDATA[
		<p>延续<a id="viewpost1_TitleUrl" href="/qixiangnj/archive/2006/12/13/87593.html">『蚂蚁学模式』之实例化简单工厂、工厂方法模式</a>中工厂方法模式的实例。<br />而这次，汽车厂(MotorFactory)有新的需求，不只要生产国产车(NativeMotor)，还需要生产进口车(ForeignMotor)。这两种车都包括公交(Bus)和小轿车(Car)。<br />1. com.cleversoft.designpatterns.abstractfactory.MotorFactory.java</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_86_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_89_Open_Text.style.display='none'; Codehighlighter1_86_89_Closed_Image.style.display='inline'; Codehighlighter1_86_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_86_89_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_89_Closed_Text.style.display='none'; Codehighlighter1_86_89_Open_Image.style.display='inline'; Codehighlighter1_86_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> MotorFactory </span>
				<span id="Codehighlighter1_86_89_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">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_86_89_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />2. com.cleversoft.designpatterns.abstractfactory.NativeMotor.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_105_220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_105_220_Open_Text.style.display='none'; Codehighlighter1_105_220_Closed_Image.style.display='inline'; Codehighlighter1_105_220_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_105_220_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_105_220_Closed_Text.style.display='none'; Codehighlighter1_105_220_Open_Image.style.display='inline'; Codehighlighter1_105_220_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NativeMotor </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> MotorFactory </span><span id="Codehighlighter1_105_220_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_105_220_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_132_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_161_Open_Text.style.display='none'; Codehighlighter1_132_161_Closed_Image.style.display='inline'; Codehighlighter1_132_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_132_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_161_Closed_Text.style.display='none'; Codehighlighter1_132_161_Open_Image.style.display='inline'; Codehighlighter1_132_161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Car produceCar() </span><span id="Codehighlighter1_132_161_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_132_161_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> NativeCar();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_189_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_189_218_Open_Text.style.display='none'; Codehighlighter1_189_218_Closed_Image.style.display='inline'; Codehighlighter1_189_218_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_189_218_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_218_Closed_Text.style.display='none'; Codehighlighter1_189_218_Open_Image.style.display='inline'; Codehighlighter1_189_218_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Bus produceBus() </span><span id="Codehighlighter1_189_218_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_189_218_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> NativeBus();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />3. com.cleversoft.designpatterns.abstractfactory.ForeignMotor.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_106_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_223_Open_Text.style.display='none'; Codehighlighter1_106_223_Closed_Image.style.display='inline'; Codehighlighter1_106_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_106_223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_223_Closed_Text.style.display='none'; Codehighlighter1_106_223_Open_Image.style.display='inline'; Codehighlighter1_106_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ForeignMotor </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> MotorFactory </span><span id="Codehighlighter1_106_223_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_106_223_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_133_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_163_Open_Text.style.display='none'; Codehighlighter1_133_163_Closed_Image.style.display='inline'; Codehighlighter1_133_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_133_163_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_133_163_Closed_Text.style.display='none'; Codehighlighter1_133_163_Open_Image.style.display='inline'; Codehighlighter1_133_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Car produceCar() </span><span id="Codehighlighter1_133_163_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_133_163_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ForeignCar();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_191_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_221_Open_Text.style.display='none'; Codehighlighter1_191_221_Closed_Image.style.display='inline'; Codehighlighter1_191_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_191_221_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_191_221_Closed_Text.style.display='none'; Codehighlighter1_191_221_Open_Image.style.display='inline'; Codehighlighter1_191_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Bus produceBus() </span><span id="Codehighlighter1_191_221_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_191_221_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ForeignBus();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />4. com.cleversoft.designpatterns.abstractfactory.Bus.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_77_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_99_Open_Text.style.display='none'; Codehighlighter1_77_99_Closed_Image.style.display='inline'; Codehighlighter1_77_99_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_99_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_99_Closed_Text.style.display='none'; Codehighlighter1_77_99_Open_Image.style.display='inline'; Codehighlighter1_77_99_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Bus </span><span id="Codehighlighter1_77_99_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_77_99_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />5. com.cleversoft.designpatterns.abstractfactory.Car.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_77_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_99_Open_Text.style.display='none'; Codehighlighter1_77_99_Closed_Image.style.display='inline'; Codehighlighter1_77_99_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_99_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_99_Closed_Text.style.display='none'; Codehighlighter1_77_99_Open_Image.style.display='inline'; Codehighlighter1_77_99_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Car </span><span id="Codehighlighter1_77_99_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_77_99_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />6. com.cleversoft.designpatterns.abstractfactory.ForeignBus.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_95_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_198_Open_Text.style.display='none'; Codehighlighter1_95_198_Closed_Image.style.display='inline'; Codehighlighter1_95_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_95_198_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_198_Closed_Text.style.display='none'; Codehighlighter1_95_198_Open_Image.style.display='inline'; Codehighlighter1_95_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ForeignBus </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Bus </span><span id="Codehighlighter1_95_198_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_95_198_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_119_123_Open_Image" onclick="this.style.display='none'; Codehighlighter1_119_123_Open_Text.style.display='none'; Codehighlighter1_119_123_Closed_Image.style.display='inline'; Codehighlighter1_119_123_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_119_123_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_123_Closed_Text.style.display='none'; Codehighlighter1_119_123_Open_Image.style.display='inline'; Codehighlighter1_119_123_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ForeignBus() </span><span id="Codehighlighter1_119_123_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_119_123_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_145_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_196_Open_Text.style.display='none'; Codehighlighter1_145_196_Closed_Image.style.display='inline'; Codehighlighter1_145_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_145_196_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_196_Closed_Text.style.display='none'; Codehighlighter1_145_196_Open_Image.style.display='inline'; Codehighlighter1_145_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() </span><span id="Codehighlighter1_145_196_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_145_196_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is a foreign bus!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />7. com.cleversoft.designpatterns.abstractfactory.ForeignCar.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_95_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_198_Open_Text.style.display='none'; Codehighlighter1_95_198_Closed_Image.style.display='inline'; Codehighlighter1_95_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_95_198_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_95_198_Closed_Text.style.display='none'; Codehighlighter1_95_198_Open_Image.style.display='inline'; Codehighlighter1_95_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ForeignCar </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Car </span><span id="Codehighlighter1_95_198_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_95_198_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_119_123_Open_Image" onclick="this.style.display='none'; Codehighlighter1_119_123_Open_Text.style.display='none'; Codehighlighter1_119_123_Closed_Image.style.display='inline'; Codehighlighter1_119_123_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_119_123_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_123_Closed_Text.style.display='none'; Codehighlighter1_119_123_Open_Image.style.display='inline'; Codehighlighter1_119_123_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ForeignCar() </span><span id="Codehighlighter1_119_123_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_119_123_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_145_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_196_Open_Text.style.display='none'; Codehighlighter1_145_196_Closed_Image.style.display='inline'; Codehighlighter1_145_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_145_196_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_196_Closed_Text.style.display='none'; Codehighlighter1_145_196_Open_Image.style.display='inline'; Codehighlighter1_145_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() </span><span id="Codehighlighter1_145_196_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_145_196_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is a foreign car!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />8. com.cleversoft.designpatterns.abstractfactory.NativeBus.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_94_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_195_Open_Text.style.display='none'; Codehighlighter1_94_195_Closed_Image.style.display='inline'; Codehighlighter1_94_195_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_94_195_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_195_Closed_Text.style.display='none'; Codehighlighter1_94_195_Open_Image.style.display='inline'; Codehighlighter1_94_195_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NativeBus </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Bus </span><span id="Codehighlighter1_94_195_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_94_195_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_117_121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_121_Open_Text.style.display='none'; Codehighlighter1_117_121_Closed_Image.style.display='inline'; Codehighlighter1_117_121_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_117_121_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_121_Closed_Text.style.display='none'; Codehighlighter1_117_121_Open_Image.style.display='inline'; Codehighlighter1_117_121_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> NativeBus() </span><span id="Codehighlighter1_117_121_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_117_121_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_143_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_193_Open_Text.style.display='none'; Codehighlighter1_143_193_Closed_Image.style.display='inline'; Codehighlighter1_143_193_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_143_193_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_193_Closed_Text.style.display='none'; Codehighlighter1_143_193_Open_Image.style.display='inline'; Codehighlighter1_143_193_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() </span><span id="Codehighlighter1_143_193_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_143_193_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is a native bus!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />9. com.cleversoft.designpatterns.abstractfactory.NativeCar.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_94_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_194_Open_Text.style.display='none'; Codehighlighter1_94_194_Closed_Image.style.display='inline'; Codehighlighter1_94_194_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_94_194_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_194_Closed_Text.style.display='none'; Codehighlighter1_94_194_Open_Image.style.display='inline'; Codehighlighter1_94_194_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NativeCar </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Car </span><span id="Codehighlighter1_94_194_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_94_194_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_116_120_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_120_Open_Text.style.display='none'; Codehighlighter1_116_120_Closed_Image.style.display='inline'; Codehighlighter1_116_120_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_116_120_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_120_Closed_Text.style.display='none'; Codehighlighter1_116_120_Open_Image.style.display='inline'; Codehighlighter1_116_120_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> NativeCar() </span><span id="Codehighlighter1_116_120_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_116_120_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_142_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_192_Open_Text.style.display='none'; Codehighlighter1_142_192_Closed_Image.style.display='inline'; Codehighlighter1_142_192_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_142_192_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_192_Closed_Text.style.display='none'; Codehighlighter1_142_192_Open_Image.style.display='inline'; Codehighlighter1_142_192_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run() </span><span id="Codehighlighter1_142_192_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_142_192_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">This is a native car!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />10. com.cleversoft.designpatterns.abstractfactory.Main.java<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.cleversoft.designpatterns.abstractfactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_74_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_293_Open_Text.style.display='none'; Codehighlighter1_74_293_Closed_Image.style.display='inline'; Codehighlighter1_74_293_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_74_293_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_293_Closed_Text.style.display='none'; Codehighlighter1_74_293_Open_Image.style.display='inline'; Codehighlighter1_74_293_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Main </span><span id="Codehighlighter1_74_293_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_74_293_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_78_101_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_101_Open_Text.style.display='none'; Codehighlighter1_78_101_Closed_Image.style.display='inline'; Codehighlighter1_78_101_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_78_101_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_101_Closed_Text.style.display='none'; Codehighlighter1_78_101_Open_Image.style.display='inline'; Codehighlighter1_78_101_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_78_101_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_78_101_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> args<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_143_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_290_Open_Text.style.display='none'; Codehighlighter1_143_290_Closed_Image.style.display='inline'; Codehighlighter1_143_290_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_143_290_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_290_Closed_Text.style.display='none'; Codehighlighter1_143_290_Open_Image.style.display='inline'; Codehighlighter1_143_290_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_143_290_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_143_290_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        Bus b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ForeignMotor().produceBus();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        b.run();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Car c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> NativeMotor().produceCar();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        c.run();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><br />终于开始想通一些问题，<img height="19" src="http://www.blogjava.net/Emoticons/shades_smile.gif" width="19" border="0" />。也再次印证这样的道理：没有笨的读者，只有笨的作者。<br />从分析的角度，你要做的无非是些抽象的活儿；从普通编程人员的角度，你要实现的是类似NativeBus.java的具体实现。这是差距，巨大的差距！<br />会写实例以外的一些东西。<br /><br />参考资料：<br />1. <a href="http://terrylee.cnblogs.com/archive/2005/12/13/295965.html">http://terrylee.cnblogs.com/archive/2005/12/13/295965.html</a><br />2. 《Java与模式》<img height="19" src="http://www.blogjava.net/Emoticons/emthup.gif" width="19" border="0" /></p><img src ="http://www.blogjava.net/qixiangnj/aggbug/88650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-18 22:22 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/18/88650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之实例化简单工厂、工厂方法模式</title><link>http://www.blogjava.net/qixiangnj/archive/2006/12/13/87593.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 13 Dec 2006 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/12/13/87593.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/87593.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/12/13/87593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/87593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/87593.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我想“一切从实例开始”是我最易接受的方式。网上有太多的理论和经验总结，于已而言，吸收亦成乐事。先看实例，很简单。UML图也懒得画了，更喜欢CRC卡片的方式。一、简单工厂模式1. com.cleversoft.designpatterns.simplefactory.Motor.javapackage com.cleversoft.designpatterns.simplefactory;publi...&nbsp;&nbsp;<a href='http://www.blogjava.net/qixiangnj/archive/2006/12/13/87593.html'>阅读全文</a><img src ="http://www.blogjava.net/qixiangnj/aggbug/87593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-12-13 22:08 <a href="http://www.blogjava.net/qixiangnj/archive/2006/12/13/87593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之迪米特法则（LoD）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/28/72683.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Thu, 28 Sep 2006 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/28/72683.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/72683.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/28/72683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/72683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/72683.html</trackback:ping><description><![CDATA[
		<p>一个对象应当对其他对象有尽可能少的了解。<br /><br />11.1 迪米特法则的各种表述：<br />1）只与你直接的朋友们通信。<br />2）不要跟“陌生人”说话。<br />3）每一个软件单位对其他的单位都只有最少的知识，而且局限于那些与本单位密切相关的软件单位。<br /><br />11.2 狭义的迪米特法则<br />如果两个类不必彼此直接通信，那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话，可以通过第三者转发这个调用。<br /><br />朋友圈的确定<br />“朋友”条件：<br />1）当前对象本身（this）<br />2）以参量形式传入到当前对象方法中的对象<br />3）当前对象的实例变量直接引用的对象<br />4）当前对象的实例变量如果是一个聚集，那么聚集中的元素也都是朋友<br />5）当前对象所创建的对象<br />任何一个对象，如果满足上面的条件之一，就是当前对象的“朋友”；否则就是“陌生人”。<br />缺点：会在系统里造出大量的小方法，散落在系统的各个角落。<br /><br />与依赖倒转原则互补使用<br /><br />11.3 迪米特法则与设计模式<br />门面模式<font color="#ff0000">*<br /></font>调停者模式<font color="#ff0000">*</font></p>
		<p>11.4 广义的迪米特法则<br />迪米特法则的主要用意是控制信息的过载。在将迪米特法则运用到系统设计中时，要注意下面的几点：<br />1）在类的划分上，应当创建有弱耦合的类。<br />2）在类的结构设计上，每一个类都应当尽量降低成员的访问权限。<br />3）在类的设计上，只要有可能，一个类应当设计成不变类。<br />4）在对其他类的引用上，一个对象对其对象的引用应当降到最低。<br /><br />11.5 广义迪米特法则在类的设计上的体现<br />1）优先考虑将一个类设置成不变类<br />2）尽量降低一个类的访问权限<br />3）谨慎使用Serializable<br />4）尽量降低成员的访问权限<br />5）取代C Struct<br /><br />一个类似于C Struct的Java类：</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> Point<br /><img id="Codehighlighter1_19_53_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_53_Open_Text.style.display='none'; Codehighlighter1_19_53_Closed_Image.style.display='inline'; Codehighlighter1_19_53_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_53_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_53_Closed_Text.style.display='none'; Codehighlighter1_19_53_Open_Image.style.display='inline'; Codehighlighter1_19_53_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_19_53_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">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_19_53_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> x;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> y;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />一个好的设计：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Point<br /><img id="Codehighlighter1_19_308_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_308_Open_Text.style.display='none'; Codehighlighter1_19_308_Closed_Image.style.display='inline'; Codehighlighter1_19_308_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_308_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_308_Closed_Text.style.display='none'; Codehighlighter1_19_308_Open_Image.style.display='inline'; Codehighlighter1_19_308_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_308_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_19_308_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> y;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Point(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x, </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> y)<br /><img id="Codehighlighter1_86_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_122_Open_Text.style.display='none'; Codehighlighter1_86_122_Closed_Image.style.display='inline'; Codehighlighter1_86_122_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_86_122_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_122_Closed_Text.style.display='none'; Codehighlighter1_86_122_Open_Image.style.display='inline'; Codehighlighter1_86_122_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_86_122_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_86_122_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> y;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> getX()<br /><img id="Codehighlighter1_146_164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_164_Open_Text.style.display='none'; Codehighlighter1_146_164_Closed_Image.style.display='inline'; Codehighlighter1_146_164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_146_164_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_164_Closed_Text.style.display='none'; Codehighlighter1_146_164_Open_Image.style.display='inline'; Codehighlighter1_146_164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_146_164_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_146_164_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> x;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> getY()<br /><img id="Codehighlighter1_188_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_188_206_Open_Text.style.display='none'; Codehighlighter1_188_206_Closed_Image.style.display='inline'; Codehighlighter1_188_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_188_206_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_206_Closed_Text.style.display='none'; Codehighlighter1_188_206_Open_Image.style.display='inline'; Codehighlighter1_188_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_188_206_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_188_206_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> y;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setX(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x)<br /><img id="Codehighlighter1_236_256_Open_Image" onclick="this.style.display='none'; Codehighlighter1_236_256_Open_Text.style.display='none'; Codehighlighter1_236_256_Closed_Image.style.display='inline'; Codehighlighter1_236_256_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_236_256_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_256_Closed_Text.style.display='none'; Codehighlighter1_236_256_Open_Image.style.display='inline'; Codehighlighter1_236_256_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_236_256_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_236_256_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> x;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setY(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> y)<br /><img id="Codehighlighter1_286_306_Open_Image" onclick="this.style.display='none'; Codehighlighter1_286_306_Open_Text.style.display='none'; Codehighlighter1_286_306_Closed_Image.style.display='inline'; Codehighlighter1_286_306_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_286_306_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_286_306_Closed_Text.style.display='none'; Codehighlighter1_286_306_Open_Image.style.display='inline'; Codehighlighter1_286_306_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_286_306_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_286_306_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> y;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />11.6 广义迪米特法则在代码层次上的实现<br />1）限制局域变量的有效范围<img src ="http://www.blogjava.net/qixiangnj/aggbug/72683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-28 22:06 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/28/72683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之合成/聚合复合原则（CARP）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/25/71836.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Mon, 25 Sep 2006 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/25/71836.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/71836.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/25/71836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/71836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/71836.html</trackback:ping><description><![CDATA[第10章 合成/聚合复用原则（CARP）<br />合成/聚合复用原则：在一个新的对象里面使用一些已有的对象，使之成为新对象的一部分；新的对象通过向这些对象的委派达到复用已有功能的目的。<br />简言之：要尽量使用合成/聚合，尽量不要使用继承。<br /><br />10.1 合成和聚合的区别<br />聚合关系：<br />关联关系的一种，是强的关联关系。聚合是整体和个体之间的关系。<br /><img src="http://www.blogjava.net/images/blogjava_net/qixiangnj/15671/r_Car.bmp" /><br />合成关系：<br />关联关系的一种，是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期，合成关系是不能共享的。<br /><img src="http://www.blogjava.net/images/blogjava_net/qixiangnj/15671/r_MonkeyKing.bmp" /><br />10.2 复用的基本种类<br />1. 合成/聚合复用<br />好处：<br />1）新对象存取成分对象的惟一方法是通过成分对象的接口。<br />2）这种复用是黑箱复用，因为成分对象的内部细节是新对象所看不见的。<br />3）这种复用支持包装。<br />4）这种复用所需的依赖较少。<br />5）每一个新的类可以将焦点集中在一个任务上。<br />6）这种复用可以在运行时间内动态进行，新对象可以动态地引用与成分对象类型相同的对象。<br />主要缺点：通过使用这种复用建造的系统会有较多的对象需要管理。<br /><br />2. 继承<br />优点：<br />1）新的实现较为容易，因为超类的大部分功能可以通过继承关系自动进入子类。<br />2）修改或扩展继承而来的实现较为容易。<br />缺点：<br />1）继承复用破坏包装，因为继承将超类的实现细节暴露给子类。<br />2）如果超类的实现发生改变，那么子类的实现也不得不发生改变。<br />3）从超类继承而来的实现是静态的，不可能在运行时间内发生改变，因此没有足够的灵活性。<br /><br />10.3<br />区分“Has－A”与“Is－A”<br />“Is－A”代表一个类是另一个类的一种；<br />“Has－A”代表一个类是另一个类的一个角色，而不是另一个类的一个特殊种类。<br /><br />里氏代换原则是继承复用的基石。<img src ="http://www.blogjava.net/qixiangnj/aggbug/71836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-25 22:23 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/25/71836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之接口隔离原则（ISP）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/21/71200.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Thu, 21 Sep 2006 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/21/71200.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/71200.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/21/71200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/71200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/71200.html</trackback:ping><description><![CDATA[
		<p>第9章 接口隔离原则（ISP）<br />使用多个专门的接口比使用单一的总接口要好。<br />换言之，从一个客户类的角度来讲：一个类对另外一个类的依赖性应当是建立在最小的接口上的。<br /><br />9.1 what?<br />角色隔离原则<br /><br />定制服务<br />每一个Java接口都仅仅将客户端需要的行为暴露给客户端，而没有将客户端所不需要的行为放到接口中。<br />适配器模式<br /><br />接口污染<br /><br />迪米特法则要求任何一个软件实体，除非绝对需要，不然不要与外界通信。即使必须进行通信，也应当尽量限制通信的广度和深度。<br />符合迪米特法则。<br /><br />9.3 定制服务的例子<br />定制服务：如果客户端仅仅需要某一些方法的话，那么就应当向客户端提供这些需要的方法，而不要提供不需要的方法。<br />效果：<br />1）这样做很整洁<br />2）系统的可维护性<br /><br />备忘录模式<font color="#ff0000">*</font><br /><br />迭代子模式<font color="#ff0000">*</font></p>
<img src ="http://www.blogjava.net/qixiangnj/aggbug/71200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-21 21:46 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/21/71200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之依赖倒转原则（DIP）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/19/70635.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Tue, 19 Sep 2006 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/19/70635.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/70635.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/19/70635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/70635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/70635.html</trackback:ping><description><![CDATA[第8章 依赖倒转原则（DIP）<br /><br />依赖倒转原则：要依赖于抽象，不要依赖于具体。<br /><br />8.3 依赖倒转原则<br />三种耦合关系：<br />1）零耦合<br />2）具体耦合：发生在两个具体的（可实例化的）类之间。<br />3）抽象耦合：发生在一个具体类和一个抽象类（或者Java接口）之间。<br /><br />what?<br /><strong>抽象不应当依赖于细节；细节应当依赖于抽象。<br /><br /></strong>另一种表述：<br /><strong>要针对接口编程，不要针对实现编程。<br /></strong>一个具体Java类应当只实现Java接口和抽象Java类中声明过的方法，而不应当给出多余的方法。<br /><br />变量的静态类型：变量被声明时的类型。<br />变量的真实类型：变量所引用的对象的真实类型。<br /><br />引用对象的抽象类型<br />在很多情况下，一个Java程序需要引用一个对象。这个时候，如果这个对象有一个抽象类型的话，应当使用这个抽象类型作为<strong>变量的静态类型</strong>。这就是<strong>针对接口编程</strong>的含义。<br />例如：蛋 x = new 鸡();<br />而非：鸡 x = new 鸡();<br /><br />List employees = new Vector();<br />而非：Vector employees = new Vector();<br /><br />8.4 how?<br />工厂方法模式<font color="#ff0000">*</font><br />模版方法模式<font color="#ff0000">*</font><br />迭代子模式<font color="#ff0000">*<br /><br /><font color="#000000">8.5 Java对抽象类型的支持<br /></font><font color="#000000"><strong>Java接口与Java抽象类的区别：</strong><br /></font><font color="#000000">1）Java抽象类可以提供某些方法的部分实现，而Java接口则不可以。<br /></font><font color="#000000">2）一个抽象类的实现只能由这个抽象类的子类给出；</font><font color="#000000">任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型，而一个类可以实现任意多个Java接口。<br /></font></font><font color="#000000">3）从代码重构的角度上讲，将一个单独的Java具体类重构成一个Java接口的实现是很容易的；而为一个已有的具体类添加一个Java抽象类作为抽象类型却不那么容易，因为这个具体类有可能已经有一个超类。<br />4）Java接口是定义混合类型的理想工具。<br /><br />联合使用Java接口和Java抽象类<br />缺省适配模式<br /><br />8.8 优缺点<br />不容易实现；<br />假定所有的具体类都是会变化的。<br /></font><img src ="http://www.blogjava.net/qixiangnj/aggbug/70635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-19 22:40 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/19/70635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之里氏代换原则（LSP）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/15/69942.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Fri, 15 Sep 2006 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/15/69942.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/69942.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/15/69942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/69942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/69942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 7.2 what一个软件实体如果使用的是一个基类的话，那么一定适用于其子类，而且它根本不能觉察出基类对象和子类对象的区别。反之不成立。7.3 在设计模式中的体现策略模式合成模式代理模式7.5长方形和正方形Rectangle类的源代码： 1package com.javapatterns.liskov.version1; 2 3public class Rectangle 4{ 5    priva...&nbsp;&nbsp;<a href='http://www.blogjava.net/qixiangnj/archive/2006/09/15/69942.html'>阅读全文</a><img src ="http://www.blogjava.net/qixiangnj/aggbug/69942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-15 16:42 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/15/69942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之抽象类</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/13/69485.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Wed, 13 Sep 2006 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/13/69485.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/69485.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/13/69485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/69485.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/69485.html</trackback:ping><description><![CDATA[第6章 专题：抽象类<br />6.1 what？<br />抽象类仅提供一个类型的部分实现。抽象类可以有实例变量，以及一个或多个构造子。抽象类可以同时有抽象方法和具体方法。<br />一个抽象类不会有实例，这些构造子不能被客户端调用来创建实例。一个抽象类的构造子可以被其子类调用，从而使一个抽象类的所有子类都可以有一些共有的实现，而不同的子类可以在此基础上有其自己的实现。<br /><br />6.2 用途<br />抽象类通常代表一个抽象概念，它提供一个继承的出发点。<br /><br /><strong>具体类不是用来继承的<br /><br />抽象类应当拥有尽可能多的共同代码<br /></strong>在一个从抽象类到多个具体类的继承关系中，共同的代码应当尽量移动到抽象类里。<br />策略模式<br /><br /><strong>抽象类应当拥有尽可能少的数据<br /><br /></strong>6.3 基于抽象类的模式和原则<br />1. <strong>针对抽象编程</strong><br />    依赖倒转原则（DIP）<br />2. <strong>正确使用继承</strong><br />    组合/聚合复用原则（CARP）<br />    里氏代换原则（LSP）<br />3. <strong>模版方法模式<br /><br /></strong>6.4 什么时候才应当使用继承复用<br />1. <strong>子类是超类的一个特殊种类，而不是超类的一个角色。<br />    </strong>Has－A关系应当使用聚合关系描述，而只有Is－A关系才符合继承关系。<br />2. <strong>永远不会出现需要将子类换成另一个类的子类的情况。</strong><br />3. 子类具有扩展超类的责任，而不是具有置换掉（Override）或注销掉（Nullify）超类的责任。<br />4. 只有在分类学角度上有意义时，才可以使用继承，<strong>不要从工具类继承</strong>。<br /><img src ="http://www.blogjava.net/qixiangnj/aggbug/69485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-13 21:57 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/13/69485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之接口</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/11/69041.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Mon, 11 Sep 2006 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/11/69041.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/69041.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/11/69041.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/69041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/69041.html</trackback:ping><description><![CDATA[第5章 专题：Java语言的接口<br />5.1 what?<br />一个Java接口是一些方法特征的集合。<br /><br />接口继承：一个类实现一个接口。<br />实现继承：一个类是另一个类的子类。<br /><br />接口和类的最重要区别：<br />接口仅仅描述方法的特征，而不给出方法的实现；而类不仅给出方法的特征，而且给出方法的实现。<br /><br />5.2 why？<br />接口是对可插入性的保证。<br />关联的可插入性<br />关联：一个对象需要完成一项任务，所以需要知道其他的对象，并且调用其他对象的方法。这个对象对其他对象的知识叫做关联。<br /><font color="#ff0000">当前对象并不在意所关联的是哪一个具体类，而仅仅关心这个类是否实现了某一个接口。<br /></font><br />调用的可插入性<br /><br />类型<br />Java接口（以及Java抽象类）用来声明一个新的类型。<br />在理想的情况下，一个具体Java类应当只实现Java接口和抽象Java类中声明过的方法，而不应当给出多余的方法。<br /><br />类型等级结构<br /><strong>混合类型：<br /></strong>如果一个类已经有一个主要的超类型，那么通过实现一个接口，这个类可以拥有另一个次要的超类型。这种<strong>次要的超类型</strong>就叫做混合类型。<br /><font color="#ff0000">当一个具体类处于一个类的等级结构之中的时候，为这个具体类定义一个混合类型是可以保证基于这个类型的可插入性的关键。<br /></font><br />5.3 how？<br /><strong>单方法接口：</strong><br />一个单方法接口只含有一个方法。<br /><br />实现单方法接口的源代码：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MyThreadedClass </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> SomeClass </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Runnable<br /><img id="Codehighlighter1_67_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_136_Open_Text.style.display='none'; Codehighlighter1_67_136_Closed_Image.style.display='inline'; Codehighlighter1_67_136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_136_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_136_Closed_Text.style.display='none'; Codehighlighter1_67_136_Open_Image.style.display='inline'; Codehighlighter1_67_136_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_67_136_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_67_136_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  .<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  .<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  .<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> run()<br /><img id="Codehighlighter1_103_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_134_Open_Text.style.display='none'; Codehighlighter1_103_134_Closed_Image.style.display='inline'; Codehighlighter1_103_134_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_103_134_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_103_134_Closed_Text.style.display='none'; Codehighlighter1_103_134_Open_Image.style.display='inline'; Codehighlighter1_103_134_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_103_134_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_103_134_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">write your code here</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />ActionListener接口的源代码：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> ActionListener<br /><img id="Codehighlighter1_32_93_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_93_Open_Text.style.display='none'; Codehighlighter1_32_93_Closed_Image.style.display='inline'; Codehighlighter1_32_93_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_93_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_93_Closed_Text.style.display='none'; Codehighlighter1_32_93_Open_Image.style.display='inline'; Codehighlighter1_32_93_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_32_93_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_32_93_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> actionPerformed(ActionEvent event);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><strong>标识接口：<br /></strong>标识接口是没有任何方法和属性的接口。<br />标识接口不对实现它的类有任何语义上的要求，它仅仅表明实现它的类属于一个特定的类型。<br />java.io.Serializable、java.rmi.Remote等<br /><br />java.io.Serializable接口的源代码：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> java.io;<br /><img id="Codehighlighter1_46_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_47_Open_Text.style.display='none'; Codehighlighter1_46_47_Closed_Image.style.display='inline'; Codehighlighter1_46_47_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_46_47_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_47_Closed_Text.style.display='none'; Codehighlighter1_46_47_Open_Image.style.display='inline'; Codehighlighter1_46_47_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Serializable</span><span id="Codehighlighter1_46_47_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_46_47_Open_Text"><span style="COLOR: #000000">{}</span></span></div><br />java.rmi.Remote接口的源代码：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> java.rmi;<br /><img id="Codehighlighter1_41_42_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_42_Open_Text.style.display='none'; Codehighlighter1_41_42_Closed_Image.style.display='inline'; Codehighlighter1_41_42_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_41_42_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_42_Closed_Text.style.display='none'; Codehighlighter1_41_42_Open_Image.style.display='inline'; Codehighlighter1_41_42_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Remote</span><span id="Codehighlighter1_41_42_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_41_42_Open_Text"><span style="COLOR: #000000">{}</span></span></div><br />标识接口通常使用在工具类中，很少在其他地方使用。<br /><br /><strong>常量接口：</strong><br />用Java接口来声明一些常量，然后由实现这个接口的类使用这些常量。<br /><br />AppConstants接口的源代码：<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> AppConstants<br /><img id="Codehighlighter1_30_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_187_Open_Text.style.display='none'; Codehighlighter1_30_187_Closed_Image.style.display='inline'; Codehighlighter1_30_187_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_30_187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_187_Closed_Text.style.display='none'; Codehighlighter1_30_187_Open_Image.style.display='inline'; Codehighlighter1_30_187_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_30_187_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"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_30_187_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> DATA_SOURCE_NAME </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">WEBSPHERE_DATA_SOURCE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> USER_NAME </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">APP_USER</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> PASSWORD </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w1nter</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><img src ="http://www.blogjava.net/qixiangnj/aggbug/69041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-11 22:08 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/11/69041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之软件的可维护性和可复用性、“开－闭”原则（OCP）</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/10/68843.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sun, 10 Sep 2006 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/10/68843.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/68843.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/10/68843.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/68843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/68843.html</trackback:ping><description><![CDATA[
		<p>第3章 软件的可维护性和可复用性<br />3.1<br />真正的原因：<br />过于僵硬；过于脆弱；复用率低；黏度过高<br />设计目标：<br />可扩展性；灵活性；可插入性<br /><br />3.2<br />在面向对象的设计里面，可维护性复用是以设计原则和设计模式为基础的<br />设计原则：<br />“开－闭”原则<br />里氏代换原则<br />依赖倒转原则<br />接口隔离原则<br />组合/聚合复用原则<br />迪米特法则<br /><br /><br />第4章 “开－闭”原则（OCP）<br />4.1<br />“开－闭”原则：<strong>一个软件实体应当对扩展开放，对修改关闭</strong>。<br />即，在设计一个模块的时候，应当使这个模块可以在不被修改的前提下被扩展。换言之，应当可以在不必修改源代码的情况下改变这个模块的行为。<br /><br />4.2<br /><strong>抽象是关键<br /></strong><br /><strong>对可变性的封装原则：<br /></strong>1）一种可变性不应当散落在代码的很多角落里，而应当被封装到一个对象里面。<br /><font color="#ff0000">继承应当被看做是封装变化的方法，而不应当被认为是以一般的对象生成特殊的对象的方法。<br /></font>2）一种可变性不应当与另一种可变性混合在一起。<br /><br />4.3<br />里氏代换原则：<br /><strong>任何基类可以出现的地方，子类一定可以出现。<br /><br /></strong>依赖倒转原则：<br /><strong>要依赖于抽象，不要依赖于实现。<br /></strong><br />合成/聚合复用原则：<br /><strong><font color="#ff0000">要尽量使用合成/聚合，而不是继承关系达到复用的目的。</font></strong><br /><br />迪米特法则：<br /><strong>一个软件实体应当与尽可能少的其他实体发生相互作用。<br /></strong><br />接口隔离原则：<br /><strong>应当为客户端提供尽可能小的单独的接口，而不要提供大的总接口。<br /><br /></strong>4.4<br /><font color="#ff0000"><strong>*<br /></strong></font><br />4.5<br /><strong><font color="#ff0000">*<br /></font></strong><br />4.6<br />“将条件转移语句改写成为多态性”？<br />如果一个条件转移语句确实封装了某种商务逻辑的可变性，那么将此种可变性封装起来就符合“开－闭”原则设计思想了。</p>
<img src ="http://www.blogjava.net/qixiangnj/aggbug/68843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-10 22:19 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/10/68843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之UML简介</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/05/67906.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Tue, 05 Sep 2006 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/05/67906.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/67906.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/05/67906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/67906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/67906.html</trackback:ping><description><![CDATA[第2章 统一建模语言UML简介<br />2.1<br />  不使用标准设计图纸，如何建造出世贸中心？<br />2.2<br />  UML语言具有以下重要功能：<br />  可视化功能；说明功能（通用的、精确的、没有歧义的）；建造功能（映射）；建文档功能<br />2.3<br />  UML包括以下的图：<br />  <strong>使用案例图</strong>、<strong>类图</strong>、<strong>序列图</strong>、合作图、状态图、活动图、构件图、部署图<br />  结构型图（静态）：类图、对象图、构件图、部署图<br />  行为型图（动态）：使用案例图、活动图、状态图、时序图、合作图<br />2.4<br />  <strong>描述类的类图</strong><br />  <em>图一<br /></em>  类名；属性清单；方法清单；性质清单<br />  性质是由一个属性即由一个内部变量、一个赋值函数（mutator）和一个取值函数（accessor）组成的结构。<br />  <strong>描述接口的类图<br />  </strong><em>图二<br />  </em><strong>描述对象的类图<br /><br />  类图中的关系<br />  一般化关系：</strong>表示类与类之间的继承关系，接口与接口之间的继承关系，或类对接口的实现关系。<br />  <em>图三<br />  </em>extends、implements<br />  <strong>关联关系：</strong>类与类之间的联接，它使一个类知道另一个类的属性和方法。<br />  在Java语言里，关联关系是使用实例变量实现的。<br />  <em>图四<br />  </em>在每一个关联的端点，还可以有一个基数（Multiplicity），表明这一端的类可以有几个实例。<br />  <strong>聚合关系：</strong>关联关系的一种，是强的关联关系。聚合是整体和个体之间的关系。<br />  <em>图五<br /></em>  <strong>合成关系：</strong>关联关系的一种，是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。合成关系是不能共享的。<br />  <em>图六<br /></em>  <strong>依赖关系：</strong>依赖（Dependency）是类与类之间的连接，依赖总是单向的。依赖关系表示一个类依赖于另一个类的定义。<br />  <em>图七<br /></em>  在Java语言中体现为局域变量、方法的参量，以及对静态方法的调用。<br />2.5<br />  时序图<br />2.6<br />  状态图<br />  有限状态机<img src ="http://www.blogjava.net/qixiangnj/aggbug/67906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-05 22:25 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/05/67906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>『蚂蚁学模式』之写在开始</title><link>http://www.blogjava.net/qixiangnj/archive/2006/09/03/67460.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Sun, 03 Sep 2006 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/qixiangnj/archive/2006/09/03/67460.html</guid><wfw:comment>http://www.blogjava.net/qixiangnj/comments/67460.html</wfw:comment><comments>http://www.blogjava.net/qixiangnj/archive/2006/09/03/67460.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/qixiangnj/comments/commentRss/67460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qixiangnj/services/trackbacks/67460.html</trackback:ping><description><![CDATA[
		<p>  设计模式，对它，我满是畏惧。在此之前，也零星地阅读过一些相关的资料，终觉参透太难。然而，近来的学习，自己发现许多知识的掌握离不开它们。我需要系统地去学习它们。<br />  手里的《Java与模式》，1000多页的大部头。我不指望通过读某一本书就可以功力倍增。『蚂蚁学模式』这个系列，将是自己学习设计模式过程的一个记录，也是《Java与模式》的读书笔记。放在这里，也是希望它可以成为一种激励，希望自己可以坚持下来。<br />  《Java与模式》，从第12章开始具体讨论各种模式。前面的一些章节，是以后学习的准备。<br />  今天阅读的是第1章。<br /><br />第1章 模式的简史和形而上学<br />1.1<br />  共同的本质是模式<br />1.2<br />  GoF<br />1.3<br />  建筑的永恒之道<br />  质、门、道<br />1.4<br />  再论无名的质、门、道<br />1.5<br />  三论无名的质、门、道<br />  无名的质可以理解为软件的“风水”<br />1.6<br />  模式的要素：<br />  名字；问题；环境或初始环境；力；解答；举例；末态环境；推理；其他有关模式；已知的应用<br /><br /></p>
<img src ="http://www.blogjava.net/qixiangnj/aggbug/67460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qixiangnj/" target="_blank">Thomas</a> 2006-09-03 22:10 <a href="http://www.blogjava.net/qixiangnj/archive/2006/09/03/67460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>