﻿<?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-OpenStudio Weblog-随笔分类-Java开发</title><link>http://www.blogjava.net/zpuser/category/13356.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 17 Sep 2007 22:28:48 GMT</lastBuildDate><pubDate>Mon, 17 Sep 2007 22:28:48 GMT</pubDate><ttl>60</ttl><item><title>开发小经验汇总</title><link>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Mon, 17 Sep 2007 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/121209.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/121209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/121209.html</trackback:ping><description><![CDATA[1.<b>回车转换行</b>：onkeypress="if(event.keyCode == 13){//do script!}<br />2.<b>Tomcat-linux环境图形显示问题：</b>JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"<br /><b>3.Eclipse启动参数</b>：D:\eclipse3.2\eclipse.exe  -data D:\workspace -product com.genuitec.myeclipse.product.ide -vmargs -Duser.language=en -Xms128M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M<br /><b>4.eclipse生成javadoc乱码解决</b>：加入参数“-encoding UTF-8 -charset UTF-8”<br /><b>5.jsp页面禁止缓存代码</b>：<br />    response.setHeader("Pragma","No-cache"); 
<br />    response.setHeader("Cache-Control","no-cache"); 
<br />    response.setDateHeader("Expires", 0); <br /><br /><b>6.linux－mount samba</b><br />   mount -t smbfs -o codepage=cp936 远程路径 本地路径 <br /><br /><b>7.查看端口对应PID</b><br />
lsof -i tcp:PORT-NO, eg, lsof -i tcp:80<br />
lsof -i udp:PORT-NO, eg, lsof -i udp:53<br /><br /><b>8.RH5.0下smbmount的代替方法</b><br />mount -t cifs //ip/f /location/dir ...<br /><br /><img src ="http://www.blogjava.net/zpuser/aggbug/121209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-09-17 11:30 <a href="http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工厂方法模式Factory Method</title><link>http://www.blogjava.net/zpuser/archive/2007/02/28/101042.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Tue, 27 Feb 2007 16:51:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/28/101042.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/101042.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/28/101042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/101042.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/101042.html</trackback:ping><description><![CDATA[
		<div>
				<br />
				<p class="MsoToc2" style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 42.0pt right dotted 414.8pt">
						<span lang="EN-US">
								<span class="MsoHyperlink">
										<span style="mso-no-proof: yes">
												<a href="#_Toc160741679">1.<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">    </span></span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">模式定义</span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">1</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a>
										</span>
								</span>
								<span style="mso-no-proof: yes">
										<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
										<o:p>
										</o:p>
								</span>
						</span>
				</p>
				<p class="MsoToc2" style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 42.0pt right dotted 414.8pt">
						<span class="MsoHyperlink">
								<span lang="EN-US" style="mso-no-proof: yes">
										<a href="#_Toc160741680">2.<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">    </span></span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">模式介绍</span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">1</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a>
								</span>
						</span>
						<span lang="EN-US" style="mso-no-proof: yes">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoToc2" style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 42.0pt right dotted 414.8pt">
						<span class="MsoHyperlink">
								<span lang="EN-US" style="mso-no-proof: yes">
										<a href="#_Toc160741681">3.<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">    </span></span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">模式特点</span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">2</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a>
								</span>
						</span>
						<span lang="EN-US" style="mso-no-proof: yes">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoToc2" style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 42.0pt right dotted 414.8pt">
						<span class="MsoHyperlink">
								<span lang="EN-US" style="mso-no-proof: yes">
										<a href="#_Toc160741682">4.<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">    </span></span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">与其它模式的关系</span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">3</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a>
								</span>
						</span>
						<span lang="EN-US" style="mso-no-proof: yes">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoToc2" style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 42.0pt right dotted 414.8pt">
						<span class="MsoHyperlink">
								<span lang="EN-US" style="mso-no-proof: yes">
										<a href="#_Toc160741683">5.<span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><span style="mso-tab-count: 1">    </span></span><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">参考</span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"><span style="mso-tab-count: 1 dotted">... </span></span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen">3</span><span style="DISPLAY: none; COLOR: windowtext; TEXT-DECORATION: none; text-underline: none; mso-hide: screen"></span></a>
								</span>
						</span>
						<span lang="EN-US" style="mso-no-proof: yes">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h2 style="MARGIN: 13pt 0cm 13pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1">
						<a name="_Toc160741679">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">1.</font>
												<span style="FONT: 7pt 'Times New Roman'">   </span>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">模式定义</span>
						</a>
				</h2>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工厂方法模式</span>
						<span lang="EN-US">(Factory Method)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是创建模式的一种，也叫虚拟构造子</span>
						<span lang="EN-US">(Virture Constractor)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式或多态性工厂</span>
						<span lang="EN-US">(Polymorphic Factory)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-tab-count: 1">       </span>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工厂方法模式定义一个抽象的对象创建类或接口，将实际的对象创建工作交给子类来实现。</span>
				</p>
				<h2 style="MARGIN: 13pt 0cm 13pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1">
						<a name="_Toc160741680">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">2.</font>
												<span style="FONT: 7pt 'Times New Roman'">   </span>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">模式介绍</span>
						</a>
				</h2>
				<h3 style="MARGIN: 13pt 0cm 13pt 24pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level2 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.1.</span>
								</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">简单类图</span>
						</font>
				</h3>
				<h3 style="MARGIN: 13pt 0cm 13pt 24pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level2 lfo1">
						<font size="5">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
										<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
												<font size="3">
														<font face="宋体, MS Song"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:stroke joinstyle="miter"></v:stroke><v:path gradientshapeok="t" o:connecttype="rect"></v:path></font>
												</font>
												<v:shape id="_x0000_s1042" style="MARGIN-TOP: 246.2pt; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 136.9pt; WIDTH: 90pt; POSITION: absolute; HEIGHT: 23.4pt; TEXT-ALIGN: left" type="#_x0000_t202">
												</v:shape>
												<img src="http://zhangpu.17disk.com/downloadServlet?fileId=15761&amp;preview=true" />
										</span>
								</span>
						</font>
				</h3>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
						</span>
				</p>
				<h3 style="MARGIN: 13pt 0cm 13pt 24pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level2 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.2.</span>
								</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类图对应示例代码</span>
						</font>
				</h3>
				<h4 style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level3 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">2.2.1.</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">抽象产品：</span>
								<span lang="EN-US">
										<font face="Arial">AbstractProduct</font>
								</span>
						</font>
				</h4>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public interface AbstractProduct{</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public void printName();</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h4 style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level3 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">2.2.2.</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">具体产品：</span>
								<span lang="EN-US">
										<font face="Arial">ConcreteProduct1</font>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</span>
								<span lang="EN-US">
										<font face="Arial">ConcreteProduct2</font>
								</span>
						</font>
				</h4>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public class ConcreteProduct1 implements AbstractProduct{</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public void printName(){</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">    </span>System.out.println(“ConcreteProduct<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="”" w:st="on">1”</st1:chmetcnv>);</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public class ConcreteProduct2 implements AbstractProduct{</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public void printName(){</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">    </span>System.out.println(“ConcreteProduct<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="2" unitname="”" w:st="on">2”</st1:chmetcnv>);</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h4 style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level3 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">2.2.3.</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">抽象工厂：</span>
								<span lang="EN-US">
										<font face="Arial">AbstractFactory</font>
								</span>
						</font>
				</h4>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public interface AbstractFactory {</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public AbstractProduct factoryMethod();</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<h4 style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt; tab-stops: list 36.0pt; mso-list: l0 level3 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">2.2.4.</font>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">具体工厂：</span>
								<span lang="EN-US">
										<font face="Arial">ConcreteFactory1</font>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</span>
								<span lang="EN-US">
										<font face="Arial">ConcreteFactory2</font>
								</span>
						</font>
				</h4>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public class ConcreteFactory1 implements AbstractFactory{</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public AbstractProduct factoryMethod(){</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
						<span lang="EN-US">//do something.</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
						<span lang="EN-US">return new ConcreteProduct1();</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">public class ConcreteFactory2 implements AbstractFactory{</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<span style="mso-spacerun: yes">  </span>public AbstractProduct factoryMethod(){</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
						<span lang="EN-US">//do something.</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
						<span lang="EN-US">return new ConcreteProduct2();</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">}</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h2 style="MARGIN: 13pt 0cm 13pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1">
						<a name="_Toc160741681">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">3.</font>
												<span style="FONT: 7pt 'Times New Roman'">   </span>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">模式特点</span>
						</a>
				</h2>
				<h3 style="MARGIN: 13pt 0cm 13pt 24pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level2 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.1.</span>
								</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开闭原则（优点）</span>
						</font>
				</h3>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工厂方法模式解决了简单工厂模式的一些缺陷，是在简单工厂模式的基础上发展的。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">简单工厂模式把所有的重心放到工厂类上，一旦向系统增加新的产品，就必须修改工厂类，不满足开闭原则；工厂方法模式提供一个抽象的工厂接口，在不同的产品结构上实现不同的产品工厂具体类来创建该层次中的产品，通常一个具体工厂创建一个具体产品。在新增产品的时候，只需要实现新的对应工厂就可以满足需要，是符合开闭原则的。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h3 style="MARGIN: 13pt 0cm 13pt 24pt; TEXT-INDENT: -24pt; tab-stops: list 24.0pt; mso-list: l0 level2 lfo1">
						<font size="5">
								<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.2.</span>
								</span>
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缺点</span>
						</font>
				</h3>
				<ol style="MARGIN-TOP: 0cm" type="1">
						<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo2">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相比简单工厂模式，工厂方法模式客户端编程复杂，每个产品的创建都需要实例化对应的工厂类。</span>
						</li>
						<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo2">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相对的扩展性，当需要修改产品结构中的对各产品的时候，需要修改各个工厂（当然也可以直接新加入很多新的产品和工厂，但这样不是又增加了很多无用的遗留类吗，而且现实中很可能要修改客户端代码了。），而简单工厂模式仍然只要修改一个工厂类。</span>
						</li>
						<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; tab-stops: list 36.0pt; mso-list: l1 level1 lfo2">
								<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现实中常常要使用退化模式，失去多态性。实际设计中经常会有子类新增功能，那么在对应工厂生产该类的时候就需要直接返回该具体类，而不是抽象产品，不然就要向下转型了。</span>
						</li>
				</ol>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<h2 style="MARGIN: 13pt 0cm 13pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1">
						<a name="_Toc160741682">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">4.</font>
												<span style="FONT: 7pt 'Times New Roman'">   </span>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">与其它模式的关系</span>
						</a>
				</h2>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工厂方法模式与模板模式</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
								<o:p> </o:p>
								<img src="http://zhangpu.17disk.com/downloadServlet?fileId=15448&amp;preview=true" />
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US">
						</span>
				</p>
				<h2 style="MARGIN: 13pt 0cm 13pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1">
						<a name="_Toc160741683">
								<span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial">
										<span style="mso-list: Ignore">
												<font face="Arial">5.</font>
												<span style="FONT: 7pt 'Times New Roman'">   </span>
										</span>
								</span>
								<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">参考</span>
						</a>
				</h2>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《</span>
						<span lang="EN-US">java</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计模式》</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">阎宏</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">电子工业出版社</span>
				</p>
		</div>
<img src ="http://www.blogjava.net/zpuser/aggbug/101042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-02-28 00:51 <a href="http://www.blogjava.net/zpuser/archive/2007/02/28/101042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单工厂模式Simple Factory</title><link>http://www.blogjava.net/zpuser/archive/2007/02/27/101035.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Tue, 27 Feb 2007 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/27/101035.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/101035.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/27/101035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/101035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/101035.html</trackback:ping><description><![CDATA[
		<p>      简单工厂模式也叫静态工厂方法模式（Static Factory Method），是由一个工厂对象隐藏并决定产品类的具体创建的一种创建模式。是工厂方法模式的一种特例。<br /><br /><strong>什么时候使用？</strong><br />1、创建一类有公共接口或父类的对象，并要求隐藏具体实现。<br />2、隐藏子类的创建，提高扩展性。<br /><br /><strong>优点</strong>：隐藏具体产品的创建，客户端独立的创建产品而不用关心具体的创建过程，并在引入新的产品类时不用修改客户调用类。<br /><strong>缺点</strong>：所用产品的创建集中到factory上，成为系统的中心，一旦factory出现问题整个系统崩溃。<br /><br /><strong>标准简单工厂模式</strong><br /><br /><img alt="标准简单工厂模式" src="http://www.blogjava.net/images/blogjava_net/zpuser/20241/r_simple_factory_standard.PNG" /><br /><br />工厂类</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> pattern.simplefactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_32_69_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_69_Open_Text.style.display='none'; Codehighlighter1_32_69_Closed_Image.style.display='inline'; Codehighlighter1_32_69_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_69_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_69_Closed_Text.style.display='none'; Codehighlighter1_32_69_Open_Image.style.display='inline'; Codehighlighter1_32_69_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_32_69_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_32_69_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<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: #808080">@author</span>
						<span style="COLOR: #008000"> ZhangPu<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_100_468_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_468_Open_Text.style.display='none'; Codehighlighter1_100_468_Closed_Image.style.display='inline'; Codehighlighter1_100_468_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_100_468_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_468_Closed_Text.style.display='none'; Codehighlighter1_100_468_Open_Image.style.display='inline'; Codehighlighter1_100_468_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"> ProductFactory </span>
				<span id="Codehighlighter1_100_468_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_468_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_106_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_180_Open_Text.style.display='none'; Codehighlighter1_106_180_Closed_Image.style.display='inline'; Codehighlighter1_106_180_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_180_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_180_Closed_Text.style.display='none'; Codehighlighter1_106_180_Open_Image.style.display='inline'; Codehighlighter1_106_180_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_106_180_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_106_180_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<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: #808080">@param</span>
								<span style="COLOR: #008000"> className<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@return</span>
								<span style="COLOR: #008000">
										<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_233_465_Open_Image" onclick="this.style.display='none'; Codehighlighter1_233_465_Open_Text.style.display='none'; Codehighlighter1_233_465_Closed_Image.style.display='inline'; Codehighlighter1_233_465_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_233_465_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_233_465_Closed_Text.style.display='none'; Codehighlighter1_233_465_Open_Image.style.display='inline'; Codehighlighter1_233_465_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"> Product factory(String className)</span>
						<span id="Codehighlighter1_233_465_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_233_465_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Product product </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_279_360_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_360_Open_Text.style.display='none'; Codehighlighter1_279_360_Closed_Image.style.display='inline'; Codehighlighter1_279_360_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_279_360_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_279_360_Closed_Text.style.display='none'; Codehighlighter1_279_360_Open_Image.style.display='inline'; Codehighlighter1_279_360_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_279_360_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_279_360_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            product </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> (Product)Class.forName(className).newInstance();<br /><img id="Codehighlighter1_382_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_382_435_Open_Text.style.display='none'; Codehighlighter1_382_435_Closed_Image.style.display='inline'; Codehighlighter1_382_435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_382_435_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_382_435_Closed_Text.style.display='none'; Codehighlighter1_382_435_Open_Image.style.display='inline'; Codehighlighter1_382_435_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">catch</span>
								<span style="COLOR: #000000"> (Exception e) </span>
								<span id="Codehighlighter1_382_435_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_382_435_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">throw</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> RuntimeException(e);<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">return</span>
								<span style="COLOR: #000000"> product;<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>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</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">package</span><span style="COLOR: #000000"> pattern.simplefactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_32_46_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_46_Open_Text.style.display='none'; Codehighlighter1_32_46_Closed_Image.style.display='inline'; Codehighlighter1_32_46_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_46_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_46_Closed_Text.style.display='none'; Codehighlighter1_32_46_Open_Image.style.display='inline'; Codehighlighter1_32_46_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_32_46_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_32_46_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><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_73_108_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_108_Open_Text.style.display='none'; Codehighlighter1_73_108_Closed_Image.style.display='inline'; Codehighlighter1_73_108_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_73_108_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_108_Closed_Text.style.display='none'; Codehighlighter1_73_108_Open_Image.style.display='inline'; Codehighlighter1_73_108_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"> Product </span><span id="Codehighlighter1_73_108_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_108_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"> String getName();    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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">package</span><span style="COLOR: #000000"> pattern.simplefactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_32_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_63_Open_Text.style.display='none'; Codehighlighter1_32_63_Closed_Image.style.display='inline'; Codehighlighter1_32_63_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_63_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_63_Closed_Text.style.display='none'; Codehighlighter1_32_63_Open_Image.style.display='inline'; Codehighlighter1_32_63_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_32_63_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_32_63_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><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: #808080">@author</span><span style="COLOR: #008000"> ZhangPu<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_114_208_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_208_Open_Text.style.display='none'; Codehighlighter1_114_208_Closed_Image.style.display='inline'; Codehighlighter1_114_208_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_114_208_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_114_208_Closed_Text.style.display='none'; Codehighlighter1_114_208_Open_Image.style.display='inline'; Codehighlighter1_114_208_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"> ConcreteProduct </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Product </span><span id="Codehighlighter1_114_208_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_114_208_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"> String name </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">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_179_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_206_Open_Text.style.display='none'; Codehighlighter1_179_206_Closed_Image.style.display='inline'; Codehighlighter1_179_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_179_206_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_206_Closed_Text.style.display='none'; Codehighlighter1_179_206_Open_Image.style.display='inline'; Codehighlighter1_179_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"> String getName() </span><span id="Codehighlighter1_179_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_179_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"> name;<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 /><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"> pattern.simplefactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_32_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_71_Open_Text.style.display='none'; Codehighlighter1_32_71_Closed_Image.style.display='inline'; Codehighlighter1_32_71_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_32_71_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_71_Closed_Text.style.display='none'; Codehighlighter1_32_71_Open_Image.style.display='inline'; Codehighlighter1_32_71_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_32_71_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_32_71_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * client class<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> ZhangPu<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_94_285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_285_Open_Text.style.display='none'; Codehighlighter1_94_285_Closed_Image.style.display='inline'; Codehighlighter1_94_285_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_94_285_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_94_285_Closed_Text.style.display='none'; Codehighlighter1_94_285_Open_Image.style.display='inline'; Codehighlighter1_94_285_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_94_285_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_285_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_139_283_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_283_Open_Text.style.display='none'; Codehighlighter1_139_283_Closed_Image.style.display='inline'; Codehighlighter1_139_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_139_283_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_139_283_Closed_Text.style.display='none'; Codehighlighter1_139_283_Open_Image.style.display='inline'; Codehighlighter1_139_283_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_139_283_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_139_283_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Product product </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ProductFactory.factory(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pattern.simplefactory.ConcreteProduct</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(product.getName());<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><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><strong>合并抽象产品和产品的简单工厂模式<br /><br /></strong><img src="http://www.blogjava.net/images/blogjava_net/zpuser/20241/r_simple_factory_notabstactproduct.PNG" /><br /><br /><strong>合并产品和工厂的模式</strong><br /><br /><img src="http://www.blogjava.net/images/blogjava_net/zpuser/20241/r_simple_factory_unit.PNG" /><br /><br /><em><font style="BACKGROUND-COLOR: #ffffff" color="#0000ff">请注意与单例模式的区别：<br />1.单例模式构造函数是私有的，不允许外界创建。<br />2.单例模式只有一个实例。</font></em><br /><img src ="http://www.blogjava.net/zpuser/aggbug/101035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-02-27 23:32 <a href="http://www.blogjava.net/zpuser/archive/2007/02/27/101035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多例模式Multiton</title><link>http://www.blogjava.net/zpuser/archive/2007/02/22/100373.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Thu, 22 Feb 2007 13:45:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/22/100373.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/100373.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/22/100373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/100373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/100373.html</trackback:ping><description><![CDATA[      多例模式Multiton基本特性同单例Singleton,由自己创建和管理自身实例，并向系统提供自身实例。不同之处是多例类在同一容器（类加载器）或JVM中可以存在多个实例。<br /><br /><font color="#0000ff"><strong>应用实例：序列键值生成器</strong></font><br /><br />本例采用hqldb作为演示数据库。表结构如下：<br /><br /><font color="#008000">CREATE TABLE KEYTABLE(<br />  KEYNAME VARCHAR(32) NOT NULL PRIMARY KEY,<br />  KEYVALUE int NOT NULL<br />)</font><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">package</span><span style="COLOR: #000000"> pattern.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.sql.Connection;<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.sql.Driver;<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.sql.DriverManager;<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.sql.ResultSet;<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.sql.Statement;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_165_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_377_Open_Text.style.display='none'; Codehighlighter1_165_377_Closed_Image.style.display='inline'; Codehighlighter1_165_377_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_165_377_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_377_Closed_Text.style.display='none'; Codehighlighter1_165_377_Open_Image.style.display='inline'; Codehighlighter1_165_377_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_165_377_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_165_377_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Key service&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * table strunction:&lt;br/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * CREATE TABLE KEYTABLE(&lt;br/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * KEYNAME VARCHAR(32) NOT NULL PRIMARY KEY,&lt;br/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * KEYVALUE int NOT NULL&lt;br/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * )&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> @author ZhangPu<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> Feb 22, 2007 4:30:47 PM<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_404_2270_Open_Image" onclick="this.style.display='none'; Codehighlighter1_404_2270_Open_Text.style.display='none'; Codehighlighter1_404_2270_Closed_Image.style.display='inline'; Codehighlighter1_404_2270_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_404_2270_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_404_2270_Closed_Text.style.display='none'; Codehighlighter1_404_2270_Open_Image.style.display='inline'; Codehighlighter1_404_2270_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"> KeyService </span><span id="Codehighlighter1_404_2270_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_404_2270_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">int</span><span style="COLOR: #000000"> cache;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String keyName;<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">int</span><span style="COLOR: #000000"> maxValue;<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"> nextValue;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_569_652_Open_Image" onclick="this.style.display='none'; Codehighlighter1_569_652_Open_Text.style.display='none'; Codehighlighter1_569_652_Closed_Image.style.display='inline'; Codehighlighter1_569_652_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_569_652_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_569_652_Closed_Text.style.display='none'; Codehighlighter1_569_652_Open_Image.style.display='inline'; Codehighlighter1_569_652_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"> KeyService(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> cache,String keyName) </span><span id="Codehighlighter1_569_652_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_569_652_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">.cache </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> cache;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.keyName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> keyName;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      retrieveKey();<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_659_725_Open_Image" onclick="this.style.display='none'; Codehighlighter1_659_725_Open_Text.style.display='none'; Codehighlighter1_659_725_Closed_Image.style.display='inline'; Codehighlighter1_659_725_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_659_725_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_659_725_Closed_Text.style.display='none'; Codehighlighter1_659_725_Open_Image.style.display='inline'; Codehighlighter1_659_725_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_659_725_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_659_725_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * get next key form keyinfo<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: #808080">@return</span><span style="COLOR: #008000"><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_755_861_Open_Image" onclick="this.style.display='none'; Codehighlighter1_755_861_Open_Text.style.display='none'; Codehighlighter1_755_861_Closed_Image.style.display='inline'; Codehighlighter1_755_861_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_755_861_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_755_861_Closed_Text.style.display='none'; Codehighlighter1_755_861_Open_Image.style.display='inline'; Codehighlighter1_755_861_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">int</span><span style="COLOR: #000000"> getNextKey() </span><span id="Codehighlighter1_755_861_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_755_861_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_790_827_Open_Image" onclick="this.style.display='none'; Codehighlighter1_790_827_Open_Text.style.display='none'; Codehighlighter1_790_827_Closed_Image.style.display='inline'; Codehighlighter1_790_827_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_790_827_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_790_827_Closed_Text.style.display='none'; Codehighlighter1_790_827_Open_Image.style.display='inline'; Codehighlighter1_790_827_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">(nextValue </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> maxValue)</span><span id="Codehighlighter1_790_827_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_790_827_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            retrieveKey();<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">return</span><span style="COLOR: #000000"> nextValue</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_872_936_Open_Image" onclick="this.style.display='none'; Codehighlighter1_872_936_Open_Text.style.display='none'; Codehighlighter1_872_936_Closed_Image.style.display='inline'; Codehighlighter1_872_936_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_872_936_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_872_936_Closed_Text.style.display='none'; Codehighlighter1_872_936_Open_Image.style.display='inline'; Codehighlighter1_872_936_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_872_936_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_872_936_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * retrieve current value form db.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><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_968_2262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_968_2262_Open_Text.style.display='none'; Codehighlighter1_968_2262_Closed_Image.style.display='inline'; Codehighlighter1_968_2262_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_968_2262_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_968_2262_Closed_Text.style.display='none'; Codehighlighter1_968_2262_Open_Image.style.display='inline'; Codehighlighter1_968_2262_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"> retrieveKey()</span><span id="Codehighlighter1_968_2262_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_968_2262_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">retrieve database!</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/InBlock.gif" align="top" />        String sqlUpdate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">update KEYTABLE set KEYVALUE = KEYVALUE + </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> cache </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> where KEYNAME = '</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">keyName</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">; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String sqlSelete </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">select KEYVALUE from KEYTABLE where KEYNAME = '</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">keyName</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">;<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" />        Connection conn </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" />        Statement stmt </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" />        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> keyFormDb </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_1346_1956_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1346_1956_Open_Text.style.display='none'; Codehighlighter1_1346_1956_Closed_Image.style.display='inline'; Codehighlighter1_1346_1956_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1346_1956_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1346_1956_Closed_Text.style.display='none'; Codehighlighter1_1346_1956_Open_Image.style.display='inline'; Codehighlighter1_1346_1956_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span id="Codehighlighter1_1346_1956_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_1346_1956_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Driver driver </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Driver)Class.forName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.hsqldb.jdbcDriver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).newInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            DriverManager.registerDriver(driver);<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 url </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:hsqldb:hsql://localhost/pattern</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String user </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sa</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String passwd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DriverManager.getConnection(url,user,passwd);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            stmt </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn.createStatement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            stmt.executeUpdate(sqlUpdate);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ResultSet rs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> stmt.executeQuery(sqlSelete);<br /><img id="Codehighlighter1_1877_1933_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1877_1933_Open_Text.style.display='none'; Codehighlighter1_1877_1933_Closed_Image.style.display='inline'; Codehighlighter1_1877_1933_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1877_1933_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1877_1933_Closed_Text.style.display='none'; Codehighlighter1_1877_1933_Open_Image.style.display='inline'; Codehighlighter1_1877_1933_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">(rs </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> rs.next())</span><span id="Codehighlighter1_1877_1933_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_1877_1933_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                keyFormDb </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rs.getInt(</span><span style="COLOR: #000000">1</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_1975_2185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1975_2185_Open_Text.style.display='none'; Codehighlighter1_1975_2185_Closed_Image.style.display='inline'; Codehighlighter1_1975_2185_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1975_2185_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1975_2185_Closed_Text.style.display='none'; Codehighlighter1_1975_2185_Open_Image.style.display='inline'; Codehighlighter1_1975_2185_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception e)</span><span id="Codehighlighter1_1975_2185_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_1975_2185_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_1993_2067_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1993_2067_Open_Text.style.display='none'; Codehighlighter1_1993_2067_Closed_Image.style.display='inline'; Codehighlighter1_1993_2067_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1993_2067_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1993_2067_Closed_Text.style.display='none'; Codehighlighter1_1993_2067_Open_Image.style.display='inline'; Codehighlighter1_1993_2067_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1993_2067_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_1993_2067_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                stmt.close();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                conn.close();<br /><img id="Codehighlighter1_2090_2142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2090_2142_Open_Text.style.display='none'; Codehighlighter1_2090_2142_Closed_Image.style.display='inline'; Codehighlighter1_2090_2142_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2090_2142_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2090_2142_Closed_Text.style.display='none'; Codehighlighter1_2090_2142_Open_Image.style.display='inline'; Codehighlighter1_2090_2142_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">catch</span><span style="COLOR: #000000"> (Exception ex) </span><span id="Codehighlighter1_2090_2142_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_2090_2142_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                ex.printStackTrace();<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" />            e.printStackTrace();<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" />        maxValue </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> keyFormDb;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        nextValue </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> keyFormDb </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> cache;<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/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> pattern.multiton;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.HashMap;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Map;<br /><br /></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /> * KeyGenerator with multiton pattern<br /> @author ZhangPu<br /> Feb 22, 2007 5:55:24 PM<br /> </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> KeyGenerator {<br />    <br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * save keyServices<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Map</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">String,KeyGenerator</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> KeyGenerators </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HashMap</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">String,KeyGenerator</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();<br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * the current instance.<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> KeyService keyService;<br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * cache pool size<br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </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">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> KEY_CACHE </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">;<br />    <br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> KeyGenerator(){}<br />    <br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> KeyGenerator(String keyName){<br />         keyService </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> KeyService(KEY_CACHE,keyName);<br />    }<br />    <br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * Multiton instance<br />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> keyName<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </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">static</span><span style="COLOR: #000000"> KeyGenerator getInstance(String keyName){<br />        <br />        KeyGenerator keyGenerator;<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(KeyGenerators.containsKey(keyName)){<br />            keyGenerator </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> KeyGenerators.get(keyName);<br />        }</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br />            keyGenerator </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> KeyGenerator(keyName);<br />            KeyGenerators.put(keyName, keyGenerator);<br />        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> keyGenerator;<br />    }<br />    <br />    </span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br />     * business method.<br />     * </span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"><br />     </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> getNextKey(){<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> keyService.getNextKey();<br />    }<br />    <br />    <br />}<br /></span></div><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"> pattern.multiton;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_27_74_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_74_Open_Text.style.display='none'; Codehighlighter1_27_74_Closed_Image.style.display='inline'; Codehighlighter1_27_74_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_74_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_74_Closed_Text.style.display='none'; Codehighlighter1_27_74_Open_Image.style.display='inline'; Codehighlighter1_27_74_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_27_74_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_27_74_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> @author ZhangPu<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> Feb 22, 2007 6:27:22 PM<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_97_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_389_Open_Text.style.display='none'; Codehighlighter1_97_389_Closed_Image.style.display='inline'; Codehighlighter1_97_389_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_97_389_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_389_Closed_Text.style.display='none'; Codehighlighter1_97_389_Open_Image.style.display='inline'; Codehighlighter1_97_389_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_97_389_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_389_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_143_387_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_387_Open_Text.style.display='none'; Codehighlighter1_143_387_Closed_Image.style.display='inline'; Codehighlighter1_143_387_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_143_387_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_387_Closed_Text.style.display='none'; Codehighlighter1_143_387_Open_Image.style.display='inline'; Codehighlighter1_143_387_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_387_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_387_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String keyName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SYS_RESOURCE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        KeyGenerator keyGenerator </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> KeyGenerator.getInstance(keyName);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img id="Codehighlighter1_295_381_Open_Image" onclick="this.style.display='none'; Codehighlighter1_295_381_Open_Text.style.display='none'; Codehighlighter1_295_381_Closed_Image.style.display='inline'; Codehighlighter1_295_381_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_295_381_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_295_381_Closed_Text.style.display='none'; Codehighlighter1_295_381_Open_Image.style.display='inline'; Codehighlighter1_295_381_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">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id="Codehighlighter1_295_381_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_295_381_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">time</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</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">keyGenerator.getNextKey());<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/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://www.blogjava.net/zpuser/aggbug/100373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-02-22 21:45 <a href="http://www.blogjava.net/zpuser/archive/2007/02/22/100373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单例模式Singleton</title><link>http://www.blogjava.net/zpuser/archive/2007/02/22/100359.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Thu, 22 Feb 2007 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/22/100359.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/100359.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/22/100359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/100359.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/100359.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 单例模式(singleton)在很多系统中都比较常用。我用得最多的就是用来做缓存。最新重新学习设计模式，想整理一下开发中的一些经验和资料上的讲解以备以后查看。Singleton模式要点1.单例类在一个容器中只有一个实例。2.单例类使用静态方法自己提供向客户端提供实例，自己拥有自己的引用。3.必须向整个容器提供自己的实例。单例类的状态1、无状态单例类可以在多个容器或JVM中存在多个实例而正常运行，因...&nbsp;&nbsp;<a href='http://www.blogjava.net/zpuser/archive/2007/02/22/100359.html'>阅读全文</a><img src ="http://www.blogjava.net/zpuser/aggbug/100359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-02-22 18:48 <a href="http://www.blogjava.net/zpuser/archive/2007/02/22/100359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]JAVA关键字-final</title><link>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Sat, 10 Feb 2007 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/99196.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/99196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/99196.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">在</span>
				<span lang="EN-US">JAVA</span>
				<span style="font-family: 宋体;">语言中，有很多特殊的关键字（</span>
				<span lang="EN-US">final,static,super,supert,this</span>
				<span style="font-family: 宋体;">等）是每个</span>
				<span lang="EN-US">JAVA</span>
				<span style="font-family: 宋体;">程序员必须应该搞清楚的，不仅在实际开发中会用到，而起也是面试或考试题里面青睐的考点之一。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">本文是自己关于关键字</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的一些总结。</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">关键字主要应用在标志和声明类，成员变量和方法为不可变，通过这个基本定义可以扩展到</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">可以限制类和方法的继承关系。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">变量</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">变量分为简单变量和对象变量。声明</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的简单变量，表示该变量从初始化后其值（简单变量直接存储值，而不是引用）就不会改变，需要注意的是在使用其他类提供的</span>
				<span lang="EN-US">public</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">简单变量的时候，就算其他类改变了其定义并重新编译，使用的类在重新编译前该值是不会改变的（参考：</span>
				<span lang="EN-US">http://blog.csdn.net/daniel112/archive/2006/10/11/1330255.aspx</span>
				<span style="font-family: 宋体;">）。声明为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的对象变量表示一旦初始化其引用不会改变。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">变量初始化化可以在声明时或构造函数中完成。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p>
						</o:p>
						<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%;">
								<span style="color: rgb(0, 0, 0);">Public </span>
								<span style="color: rgb(0, 0, 255);">class</span>
								<span style="color: rgb(0, 0, 0);"> MyFinalTest{<br /><br />  </span>
								<span style="color: rgb(0, 128, 0);">/**</span>
								<span style="color: rgb(0, 128, 0);"> 声明时候直接初始化 </span>
								<span style="color: rgb(0, 128, 0);">*/</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
										<br />  Public </span>
								<span style="color: rgb(0, 0, 255);">final</span>
								<span style="color: rgb(0, 0, 0);"> String FINAL_STR </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> “final_str”;<br /><br />  </span>
								<span style="color: rgb(0, 128, 0);">/**</span>
								<span style="color: rgb(0, 128, 0);"> 在构造函数中初始化 </span>
								<span style="color: rgb(0, 128, 0);">*/</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
										<br />  Private </span>
								<span style="color: rgb(0, 0, 255);">final</span>
								<span style="color: rgb(0, 0, 0);"> String FINAL_STR1;<br /><br /> <br /><br />  Public MyFinalTest(){<br /><br />    FINAL_STR1 </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> “asdfasd”;<br /><br />}<br /><br />}<br /></span>
						</div>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">类</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">定义为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的类表示该类不能被继承，也就是说该类是一个功能设计完成，不在需要扩展的类。同时该成员方法也对应默认标志为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">，成员变量随定义而定。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<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, 0);">Public </span>
				<span style="color: rgb(0, 0, 255);">final</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> FinalClass{<br /><br />  Public </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> method1(){}<br /><br />  </span>
				<span style="color: rgb(0, 128, 0);">/**</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<br />  * 没有必要加关键字final<br /><br />  </span>
				<span style="color: rgb(0, 128, 0);">*/</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
						<br />  Public </span>
				<span style="color: rgb(0, 0, 255);">final</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> method2(){}<br /><br />}</span>
		</div>
		<br />
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">方法</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">定义为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的方法表示该方法不能被子类覆写（</span>
				<span lang="EN-US">override</span>
				<span style="font-family: 宋体;">）。</span>
		</p>
<img src ="http://www.blogjava.net/zpuser/aggbug/99196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2007-02-10 23:56 <a href="http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] Servlet,Filter的url-pattern详解</title><link>http://www.blogjava.net/zpuser/archive/2007/01/30/96761.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Tue, 30 Jan 2007 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/01/30/96761.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/96761.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/01/30/96761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/96761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/96761.html</trackback:ping><description><![CDATA[
		<span style="" verdana="" ,="" sans-serif="" lang="EN-US">
				<span>
				</span>Servlet</span>
		<span>和</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">filter</span>
		<span>是</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">J2EE</span>
		<span>开发中常用的技术，使用方便，配置简单，老少皆宜。估计大多数朋友都是直接配置用，也没有关心过具体的细节，今天遇到一个问题，上网查了</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
		<span>的规范才发现，</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
		<span>和</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">filter</span>
		<span>中的</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">url-pattern</span>
		<span>还是有一些文章在里面的，总结了一些东西，放出来供大家参考，以免遇到问题又要浪费时间。</span>
		<span verdana="" ,="" sans-serif="" lang="EN-US">
				<o:p>
				</o:p>
		</span>
		<h2>
				<span style="" verdana="" ,="" sans-serif="" lang="EN-US">
						<span>   <font size="3"> 一，</font></span>
						<font size="3">servlet</font>
				</span>
				<font size="3">
						<span>容器对</span>
						<span verdana="" ,="" sans-serif="" lang="EN-US">url</span>
						<span>的匹配过程：</span>
						<span verdana="" ,="" sans-serif="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</font>
		</h2>
		<p class="MsoNormal">
				<span style="" verdana="" ,="" sans-serif="" lang="EN-US">
						<span>      </span>
						<o:p>
						</o:p>
				</span>
		</p>
		<table class="MsoNormalTable" style="border: medium none ; background: rgb(242, 242, 242) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr style="">
								<td style="border: 1pt solid rgb(155, 187, 89); padding: 0cm 5.4pt; width: 426.1pt;" valign="top" width="568">
										<p class="MsoNormal">
												<span style="color: black; font-family: 宋体;">当一个请求发送到</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>容器的时候，容器先会将请求的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url</span>
												<span>减去当前应用上下文的</span>
												<span>路径</span>
												<span>作为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>的映射</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url</span>
												<span>，比如我访问的是</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<a href="http://localhost/test/aaa.html">http://localhost/test/aaa.html</a>
												</span>
												<span>，我的应用上下文是</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-hansi-font-family="" calibri="" mso-bidi-font-weight="" bold="" lang="EN-US">test</span>
												<span>，容器会将</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<a href="http://localhost/test">http://localhost/test</a>
												</span>
												<span>去掉，剩下的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">/aaa.html</span>
												<span>部分拿来做</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>的映射匹配。这个映射匹配过程是有顺序的，而且当有一个</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>匹配成功以后，就不会去理会剩下的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>了（</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">filter</span>
												<span>不同，后文会提到）。其匹配规则和顺序如下：</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<o:p>
														</o:p>
												</span>
										</p>
										<p class="MsoListParagraph">
												<span style="color: black;" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" mso-fareast-font-family="" mso-bidi-font-family="" verdana="" lang="EN-US">
														<span>1.<span style="font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" times="" new="" roman="">     </span></span>
												</span>
												<span>精确路径匹配。例子：比如</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletA </span>
												<span>的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url-pattern</span>
												<span>为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US"> /test</span>
												<span>，</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletB</span>
												<span>的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url-pattern</span>
												<span>为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="">
														<span lang="EN-US">/* </span>
												</span>
												<span>，这个时候，如果我访问的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url</span>
												<span>为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<a href="http://localhost/test">http://localhost/test</a>
												</span>
												<span>，这个时候容器就会先</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="">
												</span>
												<span>进行精确路径匹配，发现</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">/test</span>
												<span>正好被</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletA</span>
												<span>精确匹配，那么就去调用</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletA</span>
												<span>，也不会去理会其他的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>了。</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<o:p>
														</o:p>
												</span>
										</p>
										<p class="MsoListParagraph">
												<span style="color: black;" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" mso-fareast-font-family="" mso-bidi-font-family="" verdana="" lang="EN-US">
														<span>2.<span style="font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" times="" new="" roman="">     </span></span>
												</span>
												<span>最长路径匹配。例子：</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletA</span>
												<span>的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url-pattern</span>
												<span>为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">/test/*</span>
												<span>，而</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletB</span>
												<span>的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url-pattern</span>
												<span>为</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">/test/a/*</span>
												<span>，此时访问</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<a href="http://localhost/test/a">http://localhost/test/a</a>
												</span>
												<span>时，容器会选择路径最长的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>来匹配，也就是这里的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletB</span>
												<span>。</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">
														<o:p>
														</o:p>
												</span>
										</p>
										<p class="MsoListParagraph">
												<span style="color: black;" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" mso-fareast-font-family="" mso-bidi-font-family="" verdana="" lang="EN-US">
														<span>3.<span style="font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" times="" new="" roman="">     </span></span>
												</span>
												<span>扩展匹配，如果</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url</span>
												<span>最后一段包含扩展，容器将会根据扩展选择合适的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>。例子：</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servletA</span>
												<span>的</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url-pattern</span>
												<span>：</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">*.action<o:p></o:p></span>
										</p>
										<p class="MsoListParagraph">
												<strong>
														<span ,="" sans-serif="" ;="" mso-fareast-font-family="" mso-bidi-font-family="" verdana="" lang="EN-US">
																<span>4.<span style="font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;" times="" new="" roman="">     </span></span>
														</span>
												</strong>
												<span>如果前面三条规则都没有找到一个</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">servlet</span>
												<span>，容器会根据</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">url</span>
												<span>选择对应的请求资源。如果应用定义了一个</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">default servlet</span>
												<span>，则容器会将请求丢给</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">default servlet</span>
												<span>（什么是</span>
												<span verdana="" ,="" sans-serif="" ;="" mso-bidi-font-weight="" bold="" lang="EN-US">default servlet</span>
												<span>？后面会讲）</span>
												<span>。</span>
												<strong>
														<span verdana="" ,="" sans-serif="" lang="EN-US">
																<o:p>
																</o:p>
														</span>
												</strong>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal">
				<span style="" verdana="" ,="" sans-serif="" lang="EN-US">
						<span> </span>
						<span>    </span>
				</span>
				<span>根据这个规则表，就能很清楚的知道</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
				<span>的匹配过程，所以定义</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
				<span>的时候也要考虑</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">url-pattern</span>
				<span>的写法，以免出错。</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="" verdana="" ,="" sans-serif="" lang="EN-US">
						<span>      </span>
				</span>
				<span>对于</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">filter</span>
				<span>，不会像</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
				<span>那样只匹配一个</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">servlet</span>
				<span>，因为</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">filter</span>
				<span>的集合是一个链，所以只会有处理的顺序不同，而不会出现只选择一个</span>
				<spa