﻿<?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>
				<span verdana="" ,="" sans-serif="" lang="EN-US">filter</span>
				<span>。</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">Filter</span>
				<span>的处理顺序和</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">filter-mapping</span>
				<span>在</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">web.xml</span>
				<span>中定义的顺序相同。</span>
				<span verdana="" ,="" sans-serif="" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<h2>
				<font size="3">
						<span verdana="" ,="" sans-serif="" lang="EN-US">    二，url-pattern</span>
						<span>详解</span>
						<span verdana="" ,="" sans-serif="" ;="" mso-hansi-font-family="" cambria="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</font>
		</h2>
		<p class="MsoNormal">
				<span lang="EN-US">
						<span>         </span>
				</span>
				<span>在</span>
				<span lang="EN-US">web.xml</span>
				<span>文件中，以下语法用于定义映射：</span>
		</p>
		<p class="MsoListParagraph">
				<span style="font-family: Wingdings;" lang="EN-US">
						<span>l<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 lang="EN-US">”/’</span>
				<span>开头和以</span>
				<span lang="EN-US">”/*”</span>
				<span>结尾的是用来做路径映射的。</span>
		</p>
		<p class="MsoListParagraph">
				<span style="font-family: Wingdings;" lang="EN-US">
						<span>l<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 lang="EN-US">”*.”</span>
				<span>开头的是用来做扩展映射的。</span>
		</p>
		<p class="MsoListParagraph">
				<span style="font-family: Wingdings;" lang="EN-US">
						<span>l<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 lang="EN-US">“/” </span>
				<span>是用来定义</span>
				<span lang="EN-US">default servlet</span>
				<span>映射的。</span>
		</p>
		<p class="MsoListParagraph">
				<span style="font-family: Wingdings;" lang="EN-US">
						<span>l<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 lang="EN-US"> /aa/bb/cc.action</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">所以，为什么定义</span>
				<span lang="EN-US">”/*.action”</span>
				<span>这样一个看起来很正常的匹配会错？因为这个匹配即属于路径映射，也属于扩展映射，导致容器无法判断。</span>
		</p>
<img src ="http://www.blogjava.net/zpuser/aggbug/96761.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-01-30 17:01 <a href="http://www.blogjava.net/zpuser/archive/2007/01/30/96761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse各版本破解源代码</title><link>http://www.blogjava.net/zpuser/archive/2007/01/04/91833.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Thu, 04 Jan 2007 12:20:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/01/04/91833.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/91833.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/01/04/91833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/91833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/91833.html</trackback:ping><description><![CDATA[
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 255);">public</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);"> Main {<br />    </span>
				<span style="color: rgb(0, 0, 255);">private</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">static</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">final</span>
				<span style="color: rgb(0, 0, 0);"> String L </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">Decompiling this copyrighted software" + "is a violation of both your" +  "license agreement and the Digital Millenium Copyright Act of 1998" +  "(http://www.loc.gov/copyright/legislation/dmca.pdf)." + "Under section 1204 of the DMCA, penalties range up to" + "a $500,000 fine or up to five years imprisonment for "+ "a first offense. Think about it; pay for a license,"+ "avoid prosecution, and feel better about yourself.</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">;<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">static</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);"> main(String[] args) {<br />        String userId </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">zhangpu</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">;</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">mLR8ZC-056-55-4467865306604733<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> MyEclipse4.1 GA<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> 其中491(4.9.1)/400(4.0)/401(4.1)/501(5.1.0)，()内为版本号，9912310代表注册码过期时间2099/12/31</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        String need </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> userId.substring(</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">, </span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">YE3MP-501-00-9912310</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">;<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> MyEclipse4.0.0 GA<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> String need = userId.substring(0,1) + "YE3MP-400-01-9912310";<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> MyEclipse4.9.1<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> String need = userId.substring(0,1) + "YE3MP-491-01-9912310";<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> MyEclipse5.1.0 GA<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> String need = userId.substring(0,1) + "YE3MP-501-00-9912310";</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        String dx </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> need </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> L </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> userId;<br />        </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> suf </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> decode(dx);<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> System.out.println("SUF:"+suf);</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        String code </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> need </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> suf;<br />        System.out.println(change(code));<br />    }<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">static</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> decode(String s) {<br />        </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />        </span>
				<span style="color: rgb(0, 0, 255);">char</span>
				<span style="color: rgb(0, 0, 0);"> ac[] </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> s.toCharArray();<br />        </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> j </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />        </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> k </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> ac.length; j </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> k; j</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">31</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">*</span>
				<span style="color: rgb(0, 0, 0);"> i </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> ac[j];<br />        }<br />        </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> Math.abs(i);<br />    }<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">static</span>
				<span style="color: rgb(0, 0, 0);"> String change(String s) {<br />        </span>
				<span style="color: rgb(0, 0, 255);">byte</span>
				<span style="color: rgb(0, 0, 0);"> abyte0[] </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> s.getBytes();<br />        </span>
				<span style="color: rgb(0, 0, 255);">char</span>
				<span style="color: rgb(0, 0, 0);"> ac[] </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">char</span>
				<span style="color: rgb(0, 0, 0);">[s.length()];<br />        </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">;<br />        </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> k </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> abyte0.length; i </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> k; i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> j </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> abyte0[i];<br />            </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (j </span>
				<span style="color: rgb(0, 0, 0);">&gt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">48</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
				<span style="color: rgb(0, 0, 0);"> j </span>
				<span style="color: rgb(0, 0, 0);">&lt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">57</span>
				<span style="color: rgb(0, 0, 0);">)<br />                j </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> ((j </span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">48</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">5</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">%</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">10</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">48</span>
				<span style="color: rgb(0, 0, 0);">;<br />            </span>
				<span style="color: rgb(0, 0, 255);">else</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (j </span>
				<span style="color: rgb(0, 0, 0);">&gt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">65</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
				<span style="color: rgb(0, 0, 0);"> j </span>
				<span style="color: rgb(0, 0, 0);">&lt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">90</span>
				<span style="color: rgb(0, 0, 0);">)<br />                j </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> ((j </span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">65</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">13</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">%</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">26</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">65</span>
				<span style="color: rgb(0, 0, 0);">;<br />            </span>
				<span style="color: rgb(0, 0, 255);">else</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (j </span>
				<span style="color: rgb(0, 0, 0);">&gt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">97</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
				<span style="color: rgb(0, 0, 0);"> j </span>
				<span style="color: rgb(0, 0, 0);">&lt;=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">122</span>
				<span style="color: rgb(0, 0, 0);">)<br />                j </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> ((j </span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">97</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">13</span>
				<span style="color: rgb(0, 0, 0);">) </span>
				<span style="color: rgb(0, 0, 0);">%</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">26</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">+</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">97</span>
				<span style="color: rgb(0, 0, 0);">;<br />            ac[i] </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">char</span>
				<span style="color: rgb(0, 0, 0);">) j;<br />        }<br />        </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> String.valueOf(ac);<br />    }<br />}</span>
		</div>
		<br />
<img src ="http://www.blogjava.net/zpuser/aggbug/91833.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-01-04 20:20 <a href="http://www.blogjava.net/zpuser/archive/2007/01/04/91833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】装饰模式Decorator</title><link>http://www.blogjava.net/zpuser/archive/2006/12/24/89742.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Sun, 24 Dec 2006 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2006/12/24/89742.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/89742.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2006/12/24/89742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/89742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/89742.html</trackback:ping><description><![CDATA[装饰（Decorator）模式又名包装（Wrapper）模式。Decorator以对客户端透明的方式扩展对象的功能，是继承的一种代替方案。<br /><br /><b>1.什么时候使用</b><br /><ol><li>需要动态的扩展一个类，这些扩展也可以动态的撤销，并保持原有类的静态定义的情况。</li><li>需要增加由一些基本功能排列组合贰产生的非常强大的功能，并使继承关系变得不实现，典型的Wrapper应用。</li></ol>模拟类图：<br /><br /><img src="file:///C:/Documents%20and%20Settings/pu.zhang/%E6%A1%8C%E9%9D%A2/Decorator.png" alt="" /><img src="http://zhangpu.17disk.com/downloadServlet?fileId=5284" /><br /><span id="lblContent"><p>在装饰模式中的各个角色有：</p><ul><li><font color="#000080">抽象构件（Component）角色：</font>给出一个抽象接口，以规范准备接收附加责任的对象。 
</li><li><font color="#000080">具体构件（Concrete Component）角色：</font>定义一个将要接收附加责任的类。 
</li><li><font color="#000080">装饰（Decorator）角色：</font>持有一个构件（Component）对象的实例，并定义一个与抽象构件接口一致的接口。 
</li><li><font color="#000080">具体装饰（Concrete Decorator）角色：</font>负责给构件对象"贴上"附加的责任。</li></ul></span><br /><b>2.示例代码<br /><br /></b>在一个实际的项目中，给部分用户增加了一个网络硬盘的服务。要对原来的用户注册方法进行扩展完成注册的时候给用户开通和绑定网络硬盘的功能，又要保持原来注册的功能。我考虑使用decorator模式添加一个装饰的用户管理类扩展原有的管理类来实现。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /> * 用户管理抽象接口（Component）<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);"> UserManager{<br />  </span><span style="color: rgb(0, 0, 255);">public</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);"> register(User user);<br />}</span></div><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /> *  原有用户管理具体类（Concrete Component）<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</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);"> DefaultUserManager </span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);"> UserManager{<br />   </span><span style="color: rgb(0, 0, 255);">public</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);"> register(User user){<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);"><br /></span><span style="color: rgb(0, 0, 0);">   }<br />}</span></div><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /> * 用户管理具体装饰类NetDiskManager(只有一个装饰对象的情况，装饰类和具体装饰类合并)<br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</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);"> NetdiskUserManager </span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);"> UserManager{<br />  </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> UserManager userManager;<br />  </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> NetdiskUserManager(UserManager userManager){<br />    </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.userManager </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> userManager;<br />  }<br /><br />  </span><span style="color: rgb(0, 0, 255);">public</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);"> register(User user){<br />    bandingNetdisk(user);<br />    userManager.register(user);<br />  }<br /> <br />  </span><span style="color: rgb(0, 0, 255);">private</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);"> bandingNetdisk(User user){<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);"><br /></span><span style="color: rgb(0, 0, 0);">  }<br />}</span></div><b><br /></b><br /><b>3.在JDK-io包中的应用</b><br /><br />在jdk-io包中标准输入输出流等相关类库都大量使用了Decorator模式。如OutputStream与其相关子类的实现。<br /><br /><img src="http://dev.yesky.com/imagelist/05/12/6e5m3969uro1.jpg" /><br />请参考：<a target="_blank" title="http://redlly.blog.hexun.com/2545654_d.html" href="http://redlly.blog.hexun.com/2545654_d.html">http://redlly.blog.hexun.com/2545654_d.html</a><br /><br /><br /><b>4.<span id="lblContent"></span>使用装饰模式的优点和缺点</b><br /><br /><span id="lblContent"><p><strong><font color="#000080">使用装饰模式主要有以下的优点：</font></strong></p><ol><li>装饰模式与继承关系的目的都是要扩展对象的功能，但是装饰模式可以提供比继承更多的灵活性。 
</li><li>通过使用不同的具体装饰类以及这些装饰类的排列组合，设计师可以创造出很多不同行为的组合。 
</li><li>这种比继承更加灵活机动的特性，也同时意味着装饰模式比继承更加易于出错。</li></ol><p><font color="#000080"><strong>使用装饰模式主要有以下的缺点：</strong></font></p><p>由于使用装饰模式，可以比使用继承关系需要较少数目的类。使用较少的类，当然使设计比较易于进行。但是，在另一方面，使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得查错变得困难，特别是这些对象看上去都很相像。</p></span><br /><b>5.<span id="lblContent"></span>使用装饰模式的讨论</b><br /><br /><p>大多数情况下，装饰模式的实现都比上面定义中给出的示意性实现要简单。对模式进行简化时需要注意以下的情况：</p><p>（1）一个装饰类的接口必须与被装饰类的接口相容。</p><p>（2）尽量保持Component作为一个"轻"类，不要把太多的逻辑和状态放在Component类里。</p><p>（3）如果只有一个ConcreteComponent类而没有抽象的Component类（接口），那么Decorator类经常可以是ConcreteComponent的一个子类。</p><p><span id="lblContent">（4）如果只有一个ConcreteDecorator类，那么就没有必要建立一个单独的Decorator类，而可以把Decorator和ConcreteDecorator的责任合并成一个类。</span></p><p><span id="lblContent"><strong><font color="#000080">透明的装饰模式</font></strong></span></p><p><span id="lblContent"><strong></strong></span>所谓透明是指对客户端程序员来说是针对接口编程，而不是具体的继承或实现类。引用彦博士的《java与模式》的说法是：“<span id="lblContent">必须永远把孙悟空的所有变化都当成孙悟空来对待，而如果把老孙变成的雀儿当成雀儿，而不是老孙，那就被老孙骗了，而这是不应当发生的。</span>”</p><p>下面的做法是对的：</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);">Component c </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ConcreteComponent()；<br />Component c1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ConcreteDecorator1(c)；<br />Component c2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ConcreteDecorator(c1)；<br /></span></div><br />而下面的做法是不对的：<p><span style="color: rgb(0, 0, 0);"><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);">ConcreteComponent c </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ConcreteDecorator()；<br /></span></div><br /></span><span style="color: rgb(0, 0, 0);"></span></p><p><span id="lblContent"><p><strong><font color="#000080">半透明的装饰模式</font></strong></p><p>然而，纯粹的装饰模式很难找到。装饰模式的用意是在不改变接口的前提下，增强所考虑的类的性能。在增强性能的时候，往往需要建立新的公开的方法。即
便是在孙大圣的系统里，也需要新的方法。比如齐天大圣类并没有飞行的能力，而雀儿有。这就意味着雀儿应当有一个新的fly()方法。</p><p>这就导致了大多数的装饰模式的实现都是"半透明"（semi-transparent）的，而不是完全"透明"的。换言之，允许装饰模式改变接口，
增加新的方法。即声明ConcreteDecorator类型的变量，从而可以调用ConcreteDecorator类中才有的方法：</p><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 98%;"><div><span style="color: rgb(0, 0, 0);">齐天大圣 c </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> 大圣本尊()；<br />雀儿 bird </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> 雀儿(c)；<br />bird.fly()；</span></div></div><p>齐天大圣接口根本没有fly()这个方法，而雀儿接口里有这个方法。</p></span></p><br /><p>参考：</p><p>《java与模式》</p><p>google搜索："java decorator"<br /></p><br /><p><br /></p><p><br /><span id="lblContent"></span></p><p><span id="lblContent"><br /></span></p><br /><br /><img src ="http://www.blogjava.net/zpuser/aggbug/89742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2006-12-24 14:36 <a href="http://www.blogjava.net/zpuser/archive/2006/12/24/89742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>serialVersionUID 是什么</title><link>http://www.blogjava.net/zpuser/archive/2006/09/24/71584.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Sun, 24 Sep 2006 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2006/09/24/71584.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/71584.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2006/09/24/71584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/71584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/71584.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: serialVersionUID作用：<br>序列化时为了保持版本的兼容性，即在版本升级时反序列化仍保持对象的唯一性。 &nbsp;&nbsp;<a href='http://www.blogjava.net/zpuser/archive/2006/09/24/71584.html'>阅读全文</a><img src ="http://www.blogjava.net/zpuser/aggbug/71584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2006-09-24 17:54 <a href="http://www.blogjava.net/zpuser/archive/2006/09/24/71584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】Spring邮件抽象层+javamail发送Email</title><link>http://www.blogjava.net/zpuser/archive/2006/07/23/59651.html</link><dc:creator>阿卜</dc:creator><author>阿卜</author><pubDate>Sun, 23 Jul 2006 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2006/07/23/59651.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/59651.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2006/07/23/59651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/59651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/59651.html</trackback:ping><description><![CDATA[
		<p>在最近的一个网站项目中，需求要求注册验证使用邮件（当然这个很常见哈），我们开发使用的是spring+hibernate+struts+jstl，所有我想到的使用spring的邮件抽象层结合javamail来发送邮件。具体的文档说明可以参考<a href="http://www.jactiongroup.net/reference/html/" target="_blank">Spring Framework 开发参考手册</a> 的第17章。具体代码如下（实现很简单的发送）：<br /><br />1.邮件发送service的接口MailService.java</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.justinmobile.payease.base.service;<br /></span>
				<span style="COLOR: #008080"> 2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.mail.internet.MimeMessage;<br /></span>
				<span style="COLOR: #008080"> 4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> com.justinmobile.payease.base.PayeaseException;<br /></span>
				<span style="COLOR: #008080"> 6</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 7</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_145_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_193_Open_Text.style.display='none'; Codehighlighter1_145_193_Closed_Image.style.display='inline'; Codehighlighter1_145_193_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_145_193_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_193_Closed_Text.style.display='none'; Codehighlighter1_145_193_Open_Image.style.display='inline'; Codehighlighter1_145_193_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span id="Codehighlighter1_145_193_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_145_193_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
						</span>
						<span style="COLOR: #008080"> 8</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *TODO<br /></span>
						<span style="COLOR: #008080"> 9</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *</span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000">:zpu<br /></span>
						<span style="COLOR: #008080">10</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *2006-7-11 13:40:31<br /></span>
						<span style="COLOR: #008080">11</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">12</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">13</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_225_535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_225_535_Open_Text.style.display='none'; Codehighlighter1_225_535_Closed_Image.style.display='inline'; Codehighlighter1_225_535_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_225_535_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_535_Closed_Text.style.display='none'; Codehighlighter1_225_535_Open_Image.style.display='inline'; Codehighlighter1_225_535_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"> MailService </span>
				<span id="Codehighlighter1_225_535_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_225_535_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">14</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span>
						<span style="COLOR: #008080">15</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_230_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_230_319_Open_Text.style.display='none'; Codehighlighter1_230_319_Closed_Image.style.display='inline'; Codehighlighter1_230_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_230_319_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_230_319_Closed_Text.style.display='none'; Codehighlighter1_230_319_Open_Image.style.display='inline'; Codehighlighter1_230_319_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_230_319_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_230_319_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">16</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 给单个邮箱发送简单注册验证邮件<br /></span>
								<span style="COLOR: #008080">17</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@param</span>
								<span style="COLOR: #008000"> to<br /></span>
								<span style="COLOR: #008080">18</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@param</span>
								<span style="COLOR: #008000"> content<br /></span>
								<span style="COLOR: #008080">19</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@throws</span>
								<span style="COLOR: #008000"> PayeaseException<br /></span>
								<span style="COLOR: #008080">20</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">21</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> send(String to,String content) </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> PayeaseException;<br /></span>
						<span style="COLOR: #008080">22</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">23</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_392_469_Open_Image" onclick="this.style.display='none'; Codehighlighter1_392_469_Open_Text.style.display='none'; Codehighlighter1_392_469_Closed_Image.style.display='inline'; Codehighlighter1_392_469_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_392_469_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_469_Closed_Text.style.display='none'; Codehighlighter1_392_469_Open_Image.style.display='inline'; Codehighlighter1_392_469_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_392_469_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_392_469_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">24</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 使用MimeMessage发送邮件<br /></span>
								<span style="COLOR: #008080">25</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@param</span>
								<span style="COLOR: #008000"> message<br /></span>
								<span style="COLOR: #008080">26</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@throws</span>
								<span style="COLOR: #008000"> PayeaseException<br /></span>
								<span style="COLOR: #008080">27</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">28</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> send(MimeMessage message) </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> PayeaseException;<br /></span>
						<span style="COLOR: #008080">29</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">30</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />2.邮件发送service的接口的实现类：MailServiceImp.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> com.justinmobile.payease.base.service;<br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.mail.internet.MimeMessage;<br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.MailException;<br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.SimpleMailMessage;<br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.mail.javamail.JavaMailSender;<br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.justinmobile.payease.base.PayeaseException;<br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id="Codehighlighter1_301_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_349_Open_Text.style.display='none'; Codehighlighter1_301_349_Closed_Image.style.display='inline'; Codehighlighter1_301_349_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_301_349_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_301_349_Closed_Text.style.display='none'; Codehighlighter1_301_349_Open_Image.style.display='inline'; Codehighlighter1_301_349_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_301_349_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_301_349_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *TODO<br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">:zpu<br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *2006-7-11 13:47:01<br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id="Codehighlighter1_352_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_352_383_Open_Text.style.display='none'; Codehighlighter1_352_383_Closed_Image.style.display='inline'; Codehighlighter1_352_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_352_383_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_352_383_Closed_Text.style.display='none'; Codehighlighter1_352_383_Open_Image.style.display='inline'; Codehighlighter1_352_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_352_383_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_352_383_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> Home.zhang<br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *<br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id="Codehighlighter1_436_1249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_436_1249_Open_Text.style.display='none'; Codehighlighter1_436_1249_Closed_Image.style.display='inline'; Codehighlighter1_436_1249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_436_1249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_436_1249_Closed_Text.style.display='none'; Codehighlighter1_436_1249_Open_Image.style.display='inline'; Codehighlighter1_436_1249_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"> MailServiceImp </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> MailService </span><span id="Codehighlighter1_436_1249_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_436_1249_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img id="Codehighlighter1_441_464_Open_Image" onclick="this.style.display='none'; Codehighlighter1_441_464_Open_Text.style.display='none'; Codehighlighter1_441_464_Closed_Image.style.display='inline'; Codehighlighter1_441_464_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_441_464_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_441_464_Closed_Text.style.display='none'; Codehighlighter1_441_464_Open_Image.style.display='inline'; Codehighlighter1_441_464_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_441_464_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_441_464_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> Spring的JavaMail实现 </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JavaMailSender mailSender;<br /></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img id="Codehighlighter1_503_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_503_517_Open_Text.style.display='none'; Codehighlighter1_503_517_Closed_Image.style.display='inline'; Codehighlighter1_503_517_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_503_517_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_503_517_Closed_Text.style.display='none'; Codehighlighter1_503_517_Open_Image.style.display='inline'; Codehighlighter1_503_517_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_503_517_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_503_517_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> 简单邮件内容对象 </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> SimpleMailMessage mailMessage;<br /></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id="Codehighlighter1_626_663_Open_Image" onclick="this.style.display='none'; Codehighlighter1_626_663_Open_Text.style.display='none'; Codehighlighter1_626_663_Closed_Image.style.display='inline'; Codehighlighter1_626_663_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_626_663_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_626_663_Closed_Text.style.display='none'; Codehighlighter1_626_663_Open_Image.style.display='inline'; Codehighlighter1_626_663_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setMailMessage(SimpleMailMessage mailMessage) </span><span id="Codehighlighter1_626_663_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_626_663_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mailMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> mailMessage;<br /></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id="Codehighlighter1_720_764_Open_Image" onclick="this.style.display='none'; Codehighlighter1_720_764_Open_Text.style.display='none'; Codehighlighter1_720_764_Closed_Image.style.display='inline'; Codehighlighter1_720_764_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_720_764_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_720_764_Closed_Text.style.display='none'; Codehighlighter1_720_764_Open_Image.style.display='inline'; Codehighlighter1_720_764_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setMailSender(JavaMailSender mailSender) </span><span id="Codehighlighter1_720_764_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_720_764_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mailSender </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> mailSender;<br /></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id="Codehighlighter1_792_806_Open_Image" onclick="this.style.display='none'; Codehighlighter1_792_806_Open_Text.style.display='none'; Codehighlighter1_792_806_Closed_Image.style.display='inline'; Codehighlighter1_792_806_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_792_806_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_792_806_Closed_Text.style.display='none'; Codehighlighter1_792_806_Open_Image.style.display='inline'; Codehighlighter1_792_806_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"> MailServiceImp() </span><span id="Codehighlighter1_792_806_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_792_806_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">();<br /></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img id="Codehighlighter1_878_1139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_878_1139_Open_Text.style.display='none'; Codehighlighter1_878_1139_Closed_Image.style.display='inline'; Codehighlighter1_878_1139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_878_1139_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_878_1139_Closed_Text.style.display='none'; Codehighlighter1_878_1139_Open_Image.style.display='inline'; Codehighlighter1_878_1139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> send(String to, String content) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> PayeaseException </span><span id="Codehighlighter1_878_1139_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_878_1139_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id="Codehighlighter1_891_1014_Open_Image" onclick="this.style.display='none'; Codehighlighter1_891_1014_Open_Text.style.display='none'; Codehighlighter1_891_1014_Closed_Image.style.display='inline'; Codehighlighter1_891_1014_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_891_1014_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_891_1014_Closed_Text.style.display='none'; Codehighlighter1_891_1014_Open_Image.style.display='inline'; Codehighlighter1_891_1014_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_891_1014_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_891_1014_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            mailMessage.setTo(to);<br /></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            mailMessage.setText(content);<br /></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            mailSender.send(mailMessage);<br /></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img id="Codehighlighter1_1048_1135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1048_1135_Open_Text.style.display='none'; Codehighlighter1_1048_1135_Closed_Image.style.display='inline'; Codehighlighter1_1048_1135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1048_1135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1048_1135_Closed_Text.style.display='none'; Codehighlighter1_1048_1135_Open_Image.style.display='inline'; Codehighlighter1_1048_1135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(MailException ex) </span><span id="Codehighlighter1_1048_1135_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_1048_1135_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><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"> PayeaseException(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">base.mailservice.send</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);            <br /></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img id="Codehighlighter1_1205_1246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1205_1246_Open_Text.style.display='none'; Codehighlighter1_1205_1246_Closed_Image.style.display='inline'; Codehighlighter1_1205_1246_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1205_1246_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1205_1246_Closed_Text.style.display='none'; Codehighlighter1_1205_1246_Open_Image.style.display='inline'; Codehighlighter1_1205_1246_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> send(MimeMessage message) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> PayeaseException </span><span id="Codehighlighter1_1205_1246_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_1205_1246_Open_Text"><span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">54</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />3.spring 的applicationContext.xml中的配置：<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: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 邮件发送 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mailSender"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.mail.javamail.JavaMailSenderImpl"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="host"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="mail.server.com"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="username"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="zpuser"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="password"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="123456"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="javaMailProperties"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="mail.smtp.auth"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">true</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mailMessage"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.mail.SimpleMailMessage"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="from"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="payease@justinmobile.com"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="subject"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="PAYEASE注册验证"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mailService"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.justinmobile.payease.base.service.MailServiceImp"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="mailSender"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="mailSender"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="mailMessage"</span><span style="COLOR: #ff0000"> ref</span><span style="COLOR: #0000ff">="mailMessage"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div><br />4.Action中调用：<br />  省略！<img src ="http://www.blogjava.net/zpuser/aggbug/59651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">阿卜</a> 2006-07-23 15:23 <a href="http://www.blogjava.net/zpuser/archive/2006/07/23/59651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>