??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产高清视频,亚洲福利电影在线观看,18亚洲男同志videos网站http://www.tkk7.com/JavaExplore/一切像雑փ雨又像风zh-cnSat, 10 May 2025 16:29:28 GMTSat, 10 May 2025 16:29:28 GMT60【原创】深入探IJFreeChartQ?Q?http://www.tkk7.com/JavaExplore/archive/2006/09/12/69261.htmlJavaExploreJavaExploreTue, 12 Sep 2006 15:36:00 GMThttp://www.tkk7.com/JavaExplore/archive/2006/09/12/69261.htmlhttp://www.tkk7.com/JavaExplore/comments/69261.htmlhttp://www.tkk7.com/JavaExplore/archive/2006/09/12/69261.html#Feedback15http://www.tkk7.com/JavaExplore/comments/commentRss/69261.htmlhttp://www.tkk7.com/JavaExplore/services/trackbacks/69261.html阅读全文

JavaExplore 2006-09-12 23:36 发表评论
]]>
【原创】《java与模式》读书笔讎ͼ5)Q各U具体模式(3Q?/title><link>http://www.tkk7.com/JavaExplore/archive/2006/09/12/69260.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Tue, 12 Sep 2006 15:33:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2006/09/12/69260.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/69260.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2006/09/12/69260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/69260.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/69260.html</trackback:ping><description><![CDATA[1、策略:常用于算法族Q将法从依赖的环境中抽象出来Ş?br />2、状态:和策略非常接q,使用于有明显状态变化的时?br />3、命令:命o的发起与执行解藕Q命令类可以独立演化Q有助于做redo undo操作以及记录所执行的命?br />4、解释:用于文法的解?br />5、P代子Qjava中有现成的实玎ͼiterator<br />6、观察者:常见Q类g模型视图的关p,java中提供了obervercdobservable接口<br />7、调停者:处理混ؕ的类交互Q抽象出中间c,类间的交互都通过q个cd?br />8、模版:拥有同一父类的多个具体子cȝ共同操作提取出来形成抽象模版c?br />         原则Q具体的U有属性应该放到具体类中,抽象cM调用属性通过属性方法而不是直接调用属?br />               私有属性放到具体的cMQ才能方便对父类q行多个实现?br />         行为看作划分类的标准,以前我都是将数据模型看作划分cȝ思想Q以后应该重新审视行为在cM的重要作用,特别是在的承等U中?img src ="http://www.tkk7.com/JavaExplore/aggbug/69260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2006-09-12 23:33 <a href="http://www.tkk7.com/JavaExplore/archive/2006/09/12/69260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】深入探IJFreeChartQ?Q?/title><link>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67217.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Fri, 01 Sep 2006 15:21:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67217.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/67217.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67217.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/67217.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/67217.html</trackback:ping><description><![CDATA[<h3 style="margin: 13pt 0cm"><span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt">1 </span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><o:p></o:p></span></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="mso-bidi-font-size: 10.5pt">JFreeChart</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">SourceForge.net</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上的一个开源项目,它的源码?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">API</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都可以免费获得?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">JFreeChart</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能非常强大,可以实现饼图</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">(</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二维和三l?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">) , </span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> (</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">水^</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">,</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">),</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">U图</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">,</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点图</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">,</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时序?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">,</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甘特?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">, </span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">股票行情?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">,</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">混和?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">, </span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">温度计图</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">, </span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">d囄常用商用图表Q?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> </span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">囑Ş可以导出?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">PNG</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">JPEG</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">格式Q同时还可以?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">PDF</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">EXCEL</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">兌Q支持对囑Ş的放大、羃,支持常见囑Ş?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt">3D</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">昄?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p> <h3 style="margin: 13pt 0cm"><span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt">2 </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="5">囑Ş</font> </span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的处?/span> <span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><o:p></o:p></span></h3> <h3 style="margin: 13pt 0cm"><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体">2</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体">Q?span lang="EN-US">1 JFreeChart</span>对象<span lang="EN-US"><o:p></o:p></span></span> </h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以生成很多囑Ş对象Q它的工厂类提供?/span> <span lang="EN-US" style="color: #333333">33</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个工厂方法用于生成不同的囑Ş对象Q具体的工厂Ҏ可以参见</span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">API</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">手册或者源码中?/span> <span lang="EN-US" style="color: #333333">ChartFactory</span> <span style="font-size: 10pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">c?/span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="color: #333333"><span style="mso-spacerun: yes">             </span>JFreechart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对图形对象的抽象具体化。图形对象(</span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q,?/span> <span lang="EN-US" style="color: #333333">Title(</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">L?/span> <span lang="EN-US" style="color: #333333">)</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="color: #333333">SubTitle</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q子标题</span> <span lang="EN-US" style="color: #333333">)</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q图形的l制l构Q等几个主要对象l成。各个组成部分如下图所C:<br /> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><img alt="" src="http://www.tkk7.com/images/blogjava_net/javaexplore/chart.JPG" border="0" /><br /> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></span></span><span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q是一?/span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q上面的“</span> <span lang="EN-US" style="color: #333333">chart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标题”?/span> <span lang="EN-US" style="color: #333333">Title</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q中间区域是</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q包括绘囑֌域和坐标轴区域)Q下面的区域?/span> <span lang="EN-US" style="color: #333333">LegendTitle</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q是一U?/span> <span lang="EN-US" style="color: #333333">SubTitle</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每个</span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象只能?/span> <span lang="EN-US" style="color: #333333">1</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">Title</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q?/span> <span lang="EN-US" style="color: #333333">1</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q可以有多个</span> <span lang="EN-US" style="color: #333333">SubTitle</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象可以q行的操作有Q背景的讄Q背景颜艌Ӏ背景图片、透明度等Q、边框的讄Q是否可见、笔甅R?/span> <span lang="EN-US" style="color: #333333">Paint</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">{)、渲染方式的讄、标题对象的讄、子标题对象的增删查操作。(本文中的所有操作都不提供代码的介l,可参?/span> <span lang="EN-US" style="color: #333333">API</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">手册或者源码)</span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <h3 style="margin: 13pt 0cm"><font color="#000000"><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">2</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">Q?span lang="EN-US">2 </span>L题对?span lang="EN-US"><o:p></o:p></span></span> </font></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">L题对象是</span> <span lang="EN-US" style="color: #333333">TextTitle</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">cdQ可以进行的操作有:背景讄、字体设|(字体cd、颜艌Ӏ内宏V对齐方式等操作Q?/span> <font color="#000000"><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt">tooltip</span> <span style="font-size: 10pt; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">讄?/span> <span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt">URL</span> <span style="font-size: 10pt; font-family: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">讄?/span> <span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></span></font></p> <h3 style="margin: 13pt 0cm"><font color="#000000"><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Courier New'">2</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Courier New'">Q?span lang="EN-US">3 </span></span><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">Plot</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">对象<span lang="EN-US"><o:p></o:p></span></span> </font></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象是图形的l制l构对象?/span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中含有很多不同的</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q每一U图形对象中?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象都在实例化的时候创建。所有的</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">共有的操作有Q背景设|(背景颜色、背景图片、透明度等Q、前景透明度设|、无数据存在情况的设|(昄的字W内宏V显C的字体、显C的</span> <span lang="EN-US" style="color: #333333">Paint</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q、放大羃比例的讄Q大部分</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象q有讄</span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、设|?/span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象操作?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有</span> <span lang="EN-US" style="color: #333333">18</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">U?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">抽象cȝ具体实现cR?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的具体实现类主要׃下重要对象组成:</span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q图形的l制单元——绘囑֟Q?/span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q图形的数据源)Q?/span> <span lang="EN-US" style="color: #333333">DomainAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q区域uQ相当于</span> <span lang="EN-US" style="color: #333333">x</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">_Q?/span> <span lang="EN-US" style="color: #333333">RangeAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q范围uQ相当于</span> <span lang="EN-US" style="color: #333333">y</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">_。不同的</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象l成方式不尽相同Q有的不含有</span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q比?/span> <span lang="EN-US" style="color: #333333">CompassPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">ContourPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">MultiplePiePlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">PiePlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">{,有的不含?/span> <span lang="EN-US" style="color: #333333">DomainAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">RangeAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q另外除?/span> <span lang="EN-US" style="color: #333333">FastScatterPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">c都含有</span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q?/span> <span lang="EN-US" style="color: #333333">FastScatterPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span> <span lang="EN-US" style="color: #333333">float</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的二l数l充当数据源。尤其说明一点,饼状囄关的</span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q?/span> <span lang="EN-US" style="color: #333333">MultiplePiePlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">PiePlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">PiePlot3D</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">RingPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q中都不含有</span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">DomainAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">RangeAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般来_</span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象存储数据模型Q?/span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象存储昄模型Q?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Ҏ</span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象完成d操作?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">仍以上面的图形讲?/span> <span lang="EN-US" style="color: #333333">Plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的组成?/span> <br /> <img height="297" alt="" src="http://www.tkk7.com/images/blogjava_net/javaexplore/chart.JPG" width="706" border="0" /><br /> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   上图的中间区域是是一?/span> <span lang="EN-US" style="color: #333333">XYPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象。其中的折线部分x囑Ş的绘制单?/span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">X</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">轴是</span> <span lang="EN-US" style="color: #333333">DomainAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="color: #333333">y</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">轴是</span> <span lang="EN-US" style="color: #333333">RangeAxis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q其?/span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象属于数据模型范畴Q是</span> <span lang="EN-US" style="color: #333333">UI</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不可见对象。该图中?/span> <span lang="EN-US" style="color: #333333">plot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">背景艌Ӏ网格线的各U设|可以通过</span> <span lang="EN-US" style="color: #333333">XYPlot</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象本n完成?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="color: #333333"><span style="mso-tab-count: 1">       </span></span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面讲解</span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333">Axis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q?/span> <span lang="EN-US" style="color: #333333">X</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">轴?/span> <span lang="EN-US" style="color: #333333">y</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">轴都属于</span> <span lang="EN-US" style="color: #333333">Axis</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象Q,</span> <span lang="EN-US" style="color: #333333">Datset</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象在后l章节中专门讲解?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <h3 style="margin: 13pt 0cm"><font color="#000000"><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体">2</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体">Q?span lang="EN-US">3</span>Q?span lang="EN-US">1 Renderer</span>对象<span lang="EN-US"><o:p></o:p></span></span> </font></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象是图形的l制单元?/span> <span lang="EN-US" style="color: #333333">JFreeChart</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供了两个接?/span> <span lang="EN-US" style="color: #333333">CategoryItemRenderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">XYItemRenderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="color: #333333">1</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个抽象类</span> <span lang="EN-US" style="color: #333333">AbstractRenderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">供具体的</span> <span lang="EN-US" style="color: #333333">Renderer</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">cd玎ͼl出了将q?/span> <span lang="EN-US" style="color: #333333">50</span> <span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">U具体实现类?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0"><span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">一般来?/span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Renderer</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">对象可进行的操作有:?/span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">item label</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Q下图中的柱状图上的U色数字即ؓ</span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">item label</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的示例)的默认设|(</span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">item label</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的生方式、是否可见、字体?/span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Paint</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、正反向</span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">item label</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的位|设|等Q、绘制图形的Ҏ默认讄Q?/span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Paint</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、笔甅R是否可见等Q、绘制图形的默认讄QŞ状、笔甅R是否可见、对应的图例中是否可见等Q折U图q有U条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等Q、以及对指定</span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">item label</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的设|、指定绘制图形的讄。可以说和具体绘制的囑Ş相关的属性都可以通过</span> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Renderer</span> <span style="font-size: 10.5pt; color: #333333; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">对象讄?br /> <span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><img alt="" src="http://www.tkk7.com/images/blogjava_net/javaexplore/chart3.JPG" border="0" /><br /> </span></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不同?/span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">Renderer</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现类实现了不同的昄方式Q在含有</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">Renderer</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">JFreeChart</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象中,</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">R</font> </span><span lang="EN-US" style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">enderer</span> <span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">对象军_?span lang="EN-US">JFreeChart</span>对象的显C方式。例如:q囄<span lang="EN-US">Plot</span>对象中默认的<span lang="EN-US">Renderer</span>对象?/span> <span lang="EN-US" style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">CategoryItemRenderer</span> <span style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">对象Q通过讄</span> <span lang="EN-US" style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">Plot</span> <span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">对象?span lang="EN-US">Renderer</span>对象</span> <font color="#000000"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt">?/span> <span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">LineAndShapeRenderer</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">Q则q囑֏为线图。用中一般不需要显式的实例化一?/span> </font><span lang="EN-US" style="color: #333333"><font face="Times New Roman">R</font> </span><span lang="EN-US" style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">enderer</span> <span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">对象Q一般通过</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">JFreeChart</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象?/span> <span lang="EN-US" style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">Plot</span> <span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">对象调用现有?/span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">R</font> </span><span lang="EN-US" style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">enderer</span> <span style="color: #333333; font-family: 宋体; mso-bidi-font-size: 10.5pt">对象q行重新讄{操作?span lang="EN-US"><o:p></o:p></span></span> </p> <h3 style="margin: 13pt 0cm"><font color="#000000"><span lang="EN-US" style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">2</span> <span style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">Q?span lang="EN-US">3</span>Q?span lang="EN-US">2 Axis</span>对象<span lang="EN-US"><o:p></o:p></span></span> </font></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333"><font face="Times New Roman">JFreeChart</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供了两U类型的坐标_</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">CategoryAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q等UuQ和</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">ValueAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">QDuQ,</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">ValueAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">又有</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">3</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个子c:</span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">DateAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q时间uQ?/span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">NumberAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q数字uQ?/span> <span lang="EN-US" style="color: #333333"><font face="Times New Roman">PeriodAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q时期uQ。这些坐标uq有更详l的子类Q不再一一列D</span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><font color="#000000"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt">Axis</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt">对象可进行的操作有:标题的设|(内容、字体?span lang="EN-US">Paint</span>、显C度等Q、坐标线的设|(W画?span lang="EN-US">Paint</span>、是否可见等Q、刻度线的设|(是否可见、笔甅R?span lang="EN-US">Paint</span>、位于绘囑֌域的长度、位于绘囑֌域外的长度等Q、刻度标C的讄Q笔甅R?span lang="EN-US">Paint</span>、字体、与轴的距离{)、坐标u范围讄{?span lang="EN-US"><o:p></o:p></span></span> </font></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333"><font face="Times New Roman">CategoryAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象q可以进行的操作有:</span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><font color="#000000">d标示间距</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">讄Q?/span> <span style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><font color="#000000">最间距、最大间距、指定间距){?span lang="EN-US"><o:p></o:p></span></font> </span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333"><font face="Times New Roman">ValueAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象可进行的操作有:轴端讄Q显C的囑Ş形状Q、范围设|(是否自动产生范围、自动生的最范围、最大范围、指定确定范围、指定范围大等Q、间隔设|(是否自动产生间隔、指定间隔){?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt"><span lang="EN-US" style="color: #333333"><font face="Times New Roman">DateAxis</font> </span><span style="color: #333333; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象q有Ҏ间刻度显C格式的讄操作?/span> <span lang="EN-US" style="color: #333333"><o:p></o:p></span></p> <h3 style="margin: 13pt 0cm"><font color="#000000"><span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><font face="Times New Roman">2</font> </span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><font face="Times New Roman">4 </font></span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">子标题对?/span> <span lang="EN-US" style="font-size: 14pt; line-height: 173%; mso-bidi-font-size: 16.0pt"><o:p></o:p></span></font></h3> <p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><span style="mso-tab-count: 1">    </span></span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt">子标题对象是</span> <span lang="EN-US" style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">Title</span> </font><span style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">cd的对象,一?span lang="EN-US">JFreeChart</span>可以有多个子标题对象?span lang="EN-US">JFreeChart</span>提供?span lang="EN-US">5</span>U?span lang="EN-US">Title</span>的实玎ͼ可以是图片、文本、图例等的Ş式?/span> <span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0">Q数据源以及常用囑Ş的处理以及进一步的讨论在后l文章中介绍Q?br /> <span lang="EN-US" style="font-size: 10.5pt; color: #333333; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype></span></p> <img src ="http://www.tkk7.com/JavaExplore/aggbug/67217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2006-09-01 23:21 <a href="http://www.tkk7.com/JavaExplore/archive/2006/09/01/67217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】java与模式笔?Q各U具体模式(2Q?/title><link>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67215.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Fri, 01 Sep 2006 15:08:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67215.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/67215.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2006/09/01/67215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/67215.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/67215.html</trackback:ping><description><![CDATA[ <p>1、代理模式:参与角色Q代理与真实实体共同的抽象角艌Ӏ代理角艌Ӏ真实实体角?br />       q程代理Q封装对与远E对象复杂的调用通讯q程Q象调用本地对象一?br />       虚拟代理Q真实实体加载时间过长的Q用虚拟代理提供友好的昄方式Q一边加载实际的对象<br />       安全代理Q调用真实的对象之前插入权限验证模块<br />       引用代理Q调用真实的对象之后调用l计{相x作模?/p> <p>2、n元模式:参与对象Q徏造工厂、抽象n元、具体n?br />       分析对象的内蕴与外蕴状态,即不变的U有属性与变化的私有属性。徏造工厂用备忘录模式存储已经建造的对象Q徏造对象的时候,以参数的形式传递n元对象的内蕴属性。实际调用中Q用传递外部参数的Ҏ使用外蕴变量?/p> <p>   复合的n元对象组成的对象Q不可以整体使用享元模式Q但可以单个的n元对象属性用该模式<br />   优点Q降低内存中的对象?~点Q设计复杂?br />        </p> <p>3、门面模式:l构模式。ؓ包含有很多对象的子系l提供统一的操作接口类Q所有对该子pȝ的调用都通过q个c,降低子系l之间调用的复杂度,也符合笛比特法则Q一个对象的朋友量,只与朋友说话Q?/p> <p>4、桥梁模式:参与角色Q抽象化角色、抽象化的具体角艌Ӏ实现化角色、实现化的具体角?br /> 两个有承等U的对象,一个对象群对另一个对象群有调用关pȝ时候?br />        目的Q抽象化与实现化解?/p> <img src ="http://www.tkk7.com/JavaExplore/aggbug/67215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2006-09-01 23:08 <a href="http://www.tkk7.com/JavaExplore/archive/2006/09/01/67215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】单例模式陷?/title><link>http://www.tkk7.com/JavaExplore/archive/2006/08/26/65914.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Sat, 26 Aug 2006 03:26:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2006/08/26/65914.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/65914.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2006/08/26/65914.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/65914.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/65914.html</trackback:ping><description><![CDATA[ <p>         今天去jdonQ看了它的设计研I栏目,bang有几评论单例模式的文章Q声U“Singleton is evil”(?a >http://www.jdon.com/jive/article.jsp?forum=91&thread=17578</a>Q,q且引用几篇外文面佐证自己的观点,其中有一文章更是说Q单例不仅不是一U模式,而是一U反模式?br />        下面我谈谈我对单例模式的看法。逐一分析单例模式的陷阱,帮助大家正确使用单例模式?br />Q?Q 陷׃Q调用函数的性能瓉<br />        在c++中,单例只有一U实现方式——LazySingleton, 实现如下(本文全部使用java代码)Q?/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 id="Codehighlighter1_26_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_249_Open_Text.style.display='none'; Codehighlighter1_26_249_Closed_Image.style.display='inline'; Codehighlighter1_26_249_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_26_249_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_26_249_Closed_Text.style.display='none'; Codehighlighter1_26_249_Open_Image.style.display='inline'; Codehighlighter1_26_249_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> LazySingleton</span> <span id="Codehighlighter1_26_249_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> </span> <span id="Codehighlighter1_26_249_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> LazySingleton m_instance</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">null</span> <span style="COLOR: #000000">;<br /><img id="Codehighlighter1_106_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_107_Open_Text.style.display='none'; Codehighlighter1_106_107_Closed_Image.style.display='inline'; Codehighlighter1_106_107_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_106_107_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_106_107_Closed_Text.style.display='none'; Codehighlighter1_106_107_Open_Image.style.display='inline'; Codehighlighter1_106_107_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>     <span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> LazySingleton()</span><span id="Codehighlighter1_106_107_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_107_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_165_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_247_Open_Text.style.display='none'; Codehighlighter1_165_247_Closed_Image.style.display='inline'; Codehighlighter1_165_247_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_247_Closed_Text.style.display='none'; Codehighlighter1_165_247_Open_Image.style.display='inline'; Codehighlighter1_165_247_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>     <span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> LazySingleton getInstance()</span><span id="Codehighlighter1_165_247_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_165_247_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_instance=</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> LazySingleton();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span> </div> <p>LazySingleton对象的初始化推q到调用的时候。ƈ且ؓ了防止多U程环境下生多个实例,使用synchronized关键字保证函数getInstance调用的线E安全。synchronized关键字的存在保证了只会生一个对象,但也成了多线E环境下的性能瓉。一个多U程的程序,Cq里却要排队{候成了一个单U程式的执行程Q这在高q发环境下是不可容忍的。而c++中可以用双重检查机制将q种性能问题仅仅限制在第一ơ构造对象的时候,而java中不可以使用双重查机制?br />        但是java可以实现EagerSingletonQ实现如下:</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 id="Codehighlighter1_27_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_197_Open_Text.style.display='none'; Codehighlighter1_27_197_Closed_Image.style.display='inline'; Codehighlighter1_27_197_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_27_197_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_197_Closed_Text.style.display='none'; Codehighlighter1_27_197_Open_Image.style.display='inline'; Codehighlighter1_27_197_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> EagerSingleton</span> <span id="Codehighlighter1_27_197_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> </span> <span id="Codehighlighter1_27_197_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> EagerSingleton m_instance</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> EagerSingleton();<br /><img id="Codehighlighter1_125_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_126_Open_Text.style.display='none'; Codehighlighter1_125_126_Closed_Image.style.display='inline'; Codehighlighter1_125_126_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_125_126_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_126_Closed_Text.style.display='none'; Codehighlighter1_125_126_Open_Image.style.display='inline'; Codehighlighter1_125_126_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span>     <span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_125_126_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_125_126_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_171_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_171_195_Open_Text.style.display='none'; Codehighlighter1_171_195_Closed_Image.style.display='inline'; Codehighlighter1_171_195_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_171_195_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_195_Closed_Text.style.display='none'; Codehighlighter1_171_195_Open_Image.style.display='inline'; Codehighlighter1_171_195_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_171_195_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_171_195_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span> </div>与LazySingleton相比QEagerSingleton对象的初始化放Ccd载的时候。这样就避免了synchronized关键字的性能瓉?br />Q?Q陷׃Q访问互斥共享资?br />         EagerSingleton中访问互斥资源也要考虑U程安全问题。下面看一个例子:<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 id="Codehighlighter1_27_347_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_347_Open_Text.style.display='none'; Codehighlighter1_27_347_Closed_Image.style.display='inline'; Codehighlighter1_27_347_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_347_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_347_Closed_Text.style.display='none'; Codehighlighter1_27_347_Open_Image.style.display='inline'; Codehighlighter1_27_347_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> EagerSingleton</span><span id="Codehighlighter1_27_347_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_347_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> EagerSingleton m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EagerSingleton();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> HashMap map</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HashMap();<br /><img id="Codehighlighter1_154_155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_155_Open_Text.style.display='none'; Codehighlighter1_154_155_Closed_Image.style.display='inline'; Codehighlighter1_154_155_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_155_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_155_Closed_Text.style.display='none'; Codehighlighter1_154_155_Open_Image.style.display='inline'; Codehighlighter1_154_155_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_154_155_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_154_155_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_200_224_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_224_Open_Text.style.display='none'; Codehighlighter1_200_224_Closed_Image.style.display='inline'; Codehighlighter1_200_224_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_200_224_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_200_224_Closed_Text.style.display='none'; Codehighlighter1_200_224_Open_Image.style.display='inline'; Codehighlighter1_200_224_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_200_224_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_200_224_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_251_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_251_345_Open_Text.style.display='none'; Codehighlighter1_251_345_Closed_Image.style.display='inline'; Codehighlighter1_251_345_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_251_345_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_345_Closed_Text.style.display='none'; Codehighlighter1_251_345_Open_Image.style.display='inline'; Codehighlighter1_251_345_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> refreshMap(Object key)</span><span id="Codehighlighter1_251_345_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_251_345_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_272_341_Open_Image" onclick="this.style.display='none'; Codehighlighter1_272_341_Open_Text.style.display='none'; Codehighlighter1_272_341_Closed_Image.style.display='inline'; Codehighlighter1_272_341_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_272_341_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_341_Closed_Text.style.display='none'; Codehighlighter1_272_341_Open_Image.style.display='inline'; Codehighlighter1_272_341_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">(map)</span><span id="Codehighlighter1_272_341_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_272_341_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">map.contains(key))<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                map.put(key,value);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">value为此时的实时数据</span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">        }</span></span><span style="COLOR: #000000"> <br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>因ؓ该类是单例,可能多线Eƈ发访问mapQmap非线E安全,需要加U程安全关键字,否则掉入了讉K互斥资源的陷阱?br />Q?Q陷׃Q非法逻辑陷阱<br />        q种情况一般是滥用单例模式造成的,下面考虑一U滥用单例的情况。下面的代码的作用是getValueByName?马上printValue卛_成操作流E?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 id="Codehighlighter1_27_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_386_Open_Text.style.display='none'; Codehighlighter1_27_386_Closed_Image.style.display='inline'; Codehighlighter1_27_386_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_386_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_386_Closed_Text.style.display='none'; Codehighlighter1_27_386_Open_Image.style.display='inline'; Codehighlighter1_27_386_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> EagerSingleton</span><span id="Codehighlighter1_27_386_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_386_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> EagerSingleton m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EagerSingleton();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String value</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_153_154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_153_154_Open_Text.style.display='none'; Codehighlighter1_153_154_Closed_Image.style.display='inline'; Codehighlighter1_153_154_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_153_154_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_153_154_Closed_Text.style.display='none'; Codehighlighter1_153_154_Open_Image.style.display='inline'; Codehighlighter1_153_154_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_153_154_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_153_154_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_199_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_199_223_Open_Text.style.display='none'; Codehighlighter1_199_223_Closed_Image.style.display='inline'; Codehighlighter1_199_223_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_199_223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_199_223_Closed_Text.style.display='none'; Codehighlighter1_199_223_Open_Image.style.display='inline'; Codehighlighter1_199_223_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_199_223_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_199_223_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_278_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_278_321_Open_Text.style.display='none'; Codehighlighter1_278_321_Closed_Image.style.display='inline'; Codehighlighter1_278_321_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_278_321_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_278_321_Closed_Text.style.display='none'; Codehighlighter1_278_321_Open_Image.style.display='inline'; Codehighlighter1_278_321_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> getValueByName(String name)</span><span id="Codehighlighter1_278_321_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_278_321_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getByNameFromDateBase(name);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_348_384_Open_Image" onclick="this.style.display='none'; Codehighlighter1_348_384_Open_Text.style.display='none'; Codehighlighter1_348_384_Closed_Image.style.display='inline'; Codehighlighter1_348_384_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_348_384_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_348_384_Closed_Text.style.display='none'; Codehighlighter1_348_384_Open_Image.style.display='inline'; Codehighlighter1_348_384_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> viod printValue()</span><span id="Codehighlighter1_348_384_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_348_384_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.vaue);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p>该类含有一U有属性valueQ在多线E环境下不能保证value值的合理逻辑Q一U程getValueByName?马上printValueQ也有可能value的值已l被其他U程修改。这U情况就属于单例模式的滥用,该类Ҏ不适合做成单例?br />        消除非法逻辑的陷阱,可以通过该c重构ؓUa的行为类完成。重构后的代码如下:</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 id="Codehighlighter1_27_399_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_399_Open_Text.style.display='none'; Codehighlighter1_27_399_Closed_Image.style.display='inline'; Codehighlighter1_27_399_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_399_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_399_Closed_Text.style.display='none'; Codehighlighter1_27_399_Open_Image.style.display='inline'; Codehighlighter1_27_399_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> EagerSingleton</span><span id="Codehighlighter1_27_399_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_399_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> EagerSingleton m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EagerSingleton();<br /><img id="Codehighlighter1_125_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_126_Open_Text.style.display='none'; Codehighlighter1_125_126_Closed_Image.style.display='inline'; Codehighlighter1_125_126_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_125_126_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_126_Closed_Text.style.display='none'; Codehighlighter1_125_126_Open_Image.style.display='inline'; Codehighlighter1_125_126_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_125_126_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_125_126_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_171_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_171_195_Open_Text.style.display='none'; Codehighlighter1_171_195_Closed_Image.style.display='inline'; Codehighlighter1_171_195_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_171_195_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_195_Closed_Text.style.display='none'; Codehighlighter1_171_195_Open_Image.style.display='inline'; Codehighlighter1_171_195_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_171_195_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_171_195_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_240_284_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_284_Open_Text.style.display='none'; Codehighlighter1_240_284_Closed_Image.style.display='inline'; Codehighlighter1_240_284_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_240_284_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_240_284_Closed_Text.style.display='none'; Codehighlighter1_240_284_Open_Image.style.display='inline'; Codehighlighter1_240_284_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String getValueByName(String name)</span><span id="Codehighlighter1_240_284_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_240_284_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> getByNameFromDateBase(name);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_321_397_Open_Image" onclick="this.style.display='none'; Codehighlighter1_321_397_Open_Text.style.display='none'; Codehighlighter1_321_397_Closed_Image.style.display='inline'; Codehighlighter1_321_397_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_321_397_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_321_397_Closed_Text.style.display='none'; Codehighlighter1_321_397_Open_Image.style.display='inline'; Codehighlighter1_321_397_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> viod printName(String name)</span><span id="Codehighlighter1_321_397_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_321_397_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        String value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getValueByName(String name);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(value);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p>通过调用printName(String name)直接完成操作程Q将其中的私有属性处理成q程式的参数传递,该cMҎUa的行为类?/p><p>        含有U有属性ƈ且含有对它赋值操作的cdƈ非都会调入该陷阱Q构造函数里q行对私有属性赋g会引起非法逻辑Q如下代?/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 id="Codehighlighter1_27_267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_267_Open_Text.style.display='none'; Codehighlighter1_27_267_Closed_Image.style.display='inline'; Codehighlighter1_27_267_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_267_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_267_Closed_Text.style.display='none'; Codehighlighter1_27_267_Open_Image.style.display='inline'; Codehighlighter1_27_267_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> EagerSingleton</span><span id="Codehighlighter1_27_267_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_267_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> EagerSingleton m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EagerSingleton();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> HashMap map</span><span style="COLOR: #000000">==</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HashMap();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_157_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_157_197_Open_Text.style.display='none'; Codehighlighter1_157_197_Closed_Image.style.display='inline'; Codehighlighter1_157_197_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_157_197_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_197_Closed_Text.style.display='none'; Codehighlighter1_157_197_Open_Image.style.display='inline'; Codehighlighter1_157_197_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    <span style="COLOR: #0000ff">private</span></span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_157_197_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_157_197_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        map.put(key,value);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">value为此时的实时数据</span><span style="COLOR: #008000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_241_265_Open_Image" onclick="this.style.display='none'; Codehighlighter1_241_265_Open_Text.style.display='none'; Codehighlighter1_241_265_Closed_Image.style.display='inline'; Codehighlighter1_241_265_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_241_265_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_241_265_Closed_Text.style.display='none'; Codehighlighter1_241_265_Open_Image.style.display='inline'; Codehighlighter1_241_265_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_241_265_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_241_265_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p>构造函数里不必要加U程安全关键字也可以保证U程安全Q因为类加蝲器是U程安全的,EagerSingleton只会在类加蝲的时候实例化一ơ,q样不会出现单例模式的线E不安全Q也不会造成非法逻辑?br />Q?Q陷阱四Q单例陷q传?br />        当含有对象作为单例类的私有属性时Q陷׃仅会出现在该cLw,q会传递到U有对象所在的cM。看如下代码Q?/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 id="Codehighlighter1_27_395_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_395_Open_Text.style.display='none'; Codehighlighter1_27_395_Closed_Image.style.display='inline'; Codehighlighter1_27_395_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_395_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_395_Closed_Text.style.display='none'; Codehighlighter1_27_395_Open_Image.style.display='inline'; Codehighlighter1_27_395_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> EagerSingleton</span><span id="Codehighlighter1_27_395_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_27_395_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> EagerSingleton m_instance</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EagerSingleton();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> NewClass newClass</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nll;<br /><img id="Codehighlighter1_157_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_157_187_Open_Text.style.display='none'; Codehighlighter1_157_187_Closed_Image.style.display='inline'; Codehighlighter1_157_187_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_157_187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_187_Closed_Text.style.display='none'; Codehighlighter1_157_187_Open_Image.style.display='inline'; Codehighlighter1_157_187_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> EagerSingleton()</span><span id="Codehighlighter1_157_187_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_157_187_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        newClass</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> NewClass();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_232_256_Open_Image" onclick="this.style.display='none'; Codehighlighter1_232_256_Open_Text.style.display='none'; Codehighlighter1_232_256_Closed_Image.style.display='inline'; Codehighlighter1_232_256_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_232_256_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_232_256_Closed_Text.style.display='none'; Codehighlighter1_232_256_Open_Image.style.display='inline'; Codehighlighter1_232_256_Open_Text.style.display='inline';" src="http://www.tkk7.com/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"> agerSingleton getInstance()</span><span id="Codehighlighter1_232_256_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_232_256_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> m_instance;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_293_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_293_393_Open_Text.style.display='none'; Codehighlighter1_293_393_Closed_Image.style.display='inline'; Codehighlighter1_293_393_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_293_393_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_293_393_Closed_Text.style.display='none'; Codehighlighter1_293_393_Open_Image.style.display='inline'; Codehighlighter1_293_393_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> viod printName(String name)</span><span id="Codehighlighter1_293_393_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_293_393_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        String value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">newClass.operationByNameAndReturnValue(String name);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(value);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>乍一看,代码中除了构造函数对U有属性进行了初始化操作,其他地方没有对私有属性的赋|不会引v非法逻辑陷阱。其实这个赋值操作可能隐含在newClass.operationByNameAndReturnValue(String name)操作Q只有保证了NewClass的operationByNameAndReturnValue操作不会对它的私有属性赋值操作,才能保证真正的合理逻辑。同P只有保证NewClass的operationByNameAndReturnValue操作没有掉入讉K互斥资源陷阱Q才能真正保证EagerSingleton没有掉入该陷阱?br />        消除该陷qҎQ(1Q类Ҏ的名U要合理Q比如纯_的行ؓҎ名:interprete,excute,operation之类的方法中׃该含有对U有属性直接或者间接的赋值操作,每个Ҏ的责任要明确。(2Q单例类中尽量不要含有非单例cȝ实例作ؓU有属性(容器c除外)Q一定要有类的实例作为私有属性的时候,重新审视q个作ؓU有属性的c,是不是也应该设计成单例类Q或者保证对它的初始化赋值限制在构造函数内?img src ="http://www.tkk7.com/JavaExplore/aggbug/65914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2006-08-26 11:26 <a href="http://www.tkk7.com/JavaExplore/archive/2006/08/26/65914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原创】《java与模式》笔?/title><link>http://www.tkk7.com/JavaExplore/archive/2006/08/24/65629.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Thu, 24 Aug 2006 13:25:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2006/08/24/65629.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/65629.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2006/08/24/65629.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/65629.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/65629.html</trackback:ping><description><![CDATA[<p>最q发C?lt;java与模?gt;,正好再温故一下当q的专业译ֆ?下面是这几天记的W记.(q不是系l的讲解书中的内?<br /> 一  lD:<br /> 1、不要用接口定义常?br /> 2、自己少用标志接?br /> 3、不要承具体类<br /> 4、类层次的中间节点应该是接口或者抽象类Q叶子是具体c?br /> 5、子cd当扩展父cȝ责QQ而不是覆写父cȝ责Q<br /> 6、面向接口编E?br /> 7、不要滥用承,l合优先于?/p> <p>java中设计不当的c:calendar:作ؓ接口Q含有与具体的历法(|马历法Q相关的帔RQ不能扩展到中国的阴历历法(不符合开闭原则)<br />                     properiesc:滥用l承Q承至hashtableQ应当用聚?/p> <p>8、笛比特法则Q只与自q直接朋友通信Q不与陌生h通信Q?Q狭义笛比特法则Q只与朋友通讯Q通过自己的朋友传递间接的调用Q?Q结合依赖倒{原则修改Q不必通过朋友传递间接的调用Q通过陌生人的抽象接口调用陌生人的行ؓQ依旧不能与具体的陌生h发生通信Q?br /> 9、尽量降低类中成员的讉K权限Q不要设计退化类Q类似c中structQ?br />         java中的point2D以及Dinmension2DcLq种设计~陷Q不q这U情况问题不大)<br /> 10、如果多个具体的产品cL有共同的商业逻辑Q就可以把它们抽象到一个接口中Q如果有共同的商业逻辑Q就把共同的部分抽象到抽象类中,共同的部分尽量向cȝ承层ơ的上层UdQ以辑ֈ复用的目?br /> ?nbsp;  工厂模式<br /> 1、简单工厂模式:参与角色Q工?抽象产品c?具体产品c?/p> <p>   ~点Q添加新产品的时候,虽然产品相关代码W合开闭原则,但对工厂cLwƈ不符合,需要修改其中的产生产品Ҏ或者添加新的生方法(工厂里实现的不同造成的修改不同)来支持新的品类<br />    退化方式:省略掉工厂角Ԍ抽象产品cLd体品类的工厂角Ԍ提供静态的getInstanceҎQ比如javacd中的DateFormatc,Q本样很不符合开闭原则,父类中出C具体子类相关的代码,不方便扩展,dC品的时候,修改的时候缺点与原简单工厂的工厂角色cMQ?/p> <p>2、工厂方法模式:参与角色Q抽象工厂类/具体工厂c?抽象产品c?具体产品c?br />      消除了简单工厂的~点</p> <p><br /> 3、抽象工厂模式:单工厂模式与工厂Ҏ模式的结?/p> <p>4、单例模式:饿汉和懒汉两U,前者将本n对象作ؓ静态私有属性事先生成,后者推q到调用的时候,后者需要考虑多线E的时候,前面需要加U程安全关键字(注意Q,java中还是前者ؓ优?br />    不要滥用单例Q只有系l要求只有一个类的实例的时候才调用<br />    有的单例可能有状态属性,q就为多例模式提供了可能<br />    含有U有属性的cM成单例的时候尤其要注意Q一是私有属性的U程安全Q确实需要的时候可以加U程安全关键字,比如pȝ中的logc,二是认q些属性是不是可以所有线E共享的Q类似普通类的static<br /> ?nbsp;  各种具体模式Q?Q?br /> 1、徏造模式:参与角色4个:指导者、抽象徏造对象、具体徏造对象、?br />       一个复杂的产品有很多的雉Ӟ可以用具体的建造对象来一一构?br /> 2、原始模式:深拷贝、浅拯<br /> 3、适配器模式:adapteec适配成目标接?br /> 4、合成模式:参与角色Qcomposite接口、树枝节点类、树叶节点类<br />       分成透明式和安全式两U,各有优缺?br />       (1)前者将理子对象的Ҏ攑ֈ接口中,q样树型l构中的所有对象都是透明的,都可以统一调用Q但是叶节点q没有管理子对象的能力,因此透明但不安全<br />       (2)后者将理子对象的Ҏ下放到树枝节点类中,q样安全但不透明<br /> 5、装饰模式:l承已有cȝ接口Q提供和已有cȝ同的ҎQƈ对已有类的功能提供扩展(通过l合已有对象Q调用已有对象方法的时候加入新的代码)<br />       (1)透明的装饰模式(Ua的装饰模式)Q装饰类、被装饰cȝ承于同一接口Q而且装饰cd实现接口的方法,不提供额外方法的实现Q调用该cȝ时候用接口声明调用(实例化当然还是自q构造函敎ͼQ即该类的所有方法都是透明?br />       (2)半透明的装饰模式(退化的装饰模式Q:装饰cR被装饰cȝ承于同一接口Q装饰类不仅实现接口的方法,q提供额外方法的实现Q这栯调用它独特的Ҏ的时候就必须使用它本w来调用Q退化到一半装饰模式、一半适配器模式?/p> <img src ="http://www.tkk7.com/JavaExplore/aggbug/65629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2006-08-24 21:25 <a href="http://www.tkk7.com/JavaExplore/archive/2006/08/24/65629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Jboss上部|EJB的一点经?/title><link>http://www.tkk7.com/JavaExplore/archive/2005/09/20/13582.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Tue, 20 Sep 2005 13:29:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2005/09/20/13582.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/13582.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2005/09/20/13582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/13582.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/13582.html</trackback:ping><description><![CDATA[<P>׃很长旉Q终于在Jboss部v成功了第一个EJB?BR>EclipseQ?.1<BR>EJB:2.0<BR>JBoss:4.0.2<BR>关于如何部vEJBQ网上有不少详细介绍的文章。在q里我不在重复ejb的细枝末节。大体说一下,一个简单的EJB包括Q一个承SessionBean的类、一个承EJBObject接口的Remote接口、一个承EJBHome的Home接口、调用该EJB的一个类Q网上的教程一般v名ؓXXXClientQ?BR>l织好这些类的目录结构,写好ejb-jar.xml,基本上就完成了?BR>说明几点Q?BR>1、编译类的时候,引入jboss-j2ee.jar与jbossall-client.jar包;<BR>2、ejb-jar.xml的DOCTYPE处一定要如此Q针对EJB2.0Q我部v的时候时间都费在这儿了Q:<BR><!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "<A ><BR>3、承SessionBean的那个类臛_要有一个ejbCreate()ҎQ?BR>4、应该抛出的异常一定不能漏掉,特别是那两个接口里面的方法应该抛出的异常Q都应该有java.rmi.RemoteExceptionQ;<BR>5、部|后以dos方式重启jbossQ若部vp|Q可以在dosH口中看到出错的原因?/P><img src ="http://www.tkk7.com/JavaExplore/aggbug/13582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2005-09-20 21:29 <a href="http://www.tkk7.com/JavaExplore/archive/2005/09/20/13582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>奇的重构技术(《重构》读书笔?一Q?/title><link>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13255.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Sat, 17 Sep 2005 13:24:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13255.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/13255.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13255.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/13255.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/13255.html</trackback:ping><description><![CDATA[ <p>代码中经怼出现枚D性的变量Q比如血型、性别之类?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 id="Codehighlighter1_11_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11_148_Open_Text.style.display='none'; Codehighlighter1_11_148_Closed_Image.style.display='inline'; Codehighlighter1_11_148_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_11_148_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_148_Closed_Text.style.display='none'; Codehighlighter1_11_148_Open_Image.style.display='inline'; Codehighlighter1_11_148_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #000000">class Blood</span> <span id="Codehighlighter1_11_148_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.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_11_148_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> o</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> A</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> B</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> AB</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />private Blood();<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> <br /> <img id="Codehighlighter1_164_229_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_229_Open_Text.style.display='none'; Codehighlighter1_164_229_Closed_Image.style.display='inline'; Codehighlighter1_164_229_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_164_229_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_229_Closed_Text.style.display='none'; Codehighlighter1_164_229_Open_Image.style.display='inline'; Codehighlighter1_164_229_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />class person</span> <span id="Codehighlighter1_164_229_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.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_164_229_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />private </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> _blood;<br /><img id="Codehighlighter1_213_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_228_Open_Text.style.display='none'; Codehighlighter1_213_228_Closed_Image.style.display='inline'; Codehighlighter1_213_228_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_213_228_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_213_228_Closed_Text.style.display='none'; Codehighlighter1_213_228_Open_Image.style.display='inline'; Codehighlighter1_213_228_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />public </span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> setBlood(</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> b)</span> <span id="Codehighlighter1_213_228_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.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_213_228_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   _blood</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">b;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span> </span> </span> </div> <p>如果要给一个person的实例设|血型,代码如此Qperson.setBlood(Blood.A);<br />q个写法的代码中,setBlood的参Cؓ整型Q如果如此调用person.setBlood(9);<br />~译器无法发现错误,只能靠h为控Ӟ如果在方法setBlood中检参数的有效性,又超了该方法的职责?/p> <p>重构后的代码如下Q?/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 id="Codehighlighter1_11_299_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11_299_Open_Text.style.display='none'; Codehighlighter1_11_299_Closed_Image.style.display='inline'; Codehighlighter1_11_299_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_11_299_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_299_Closed_Text.style.display='none'; Codehighlighter1_11_299_Open_Image.style.display='inline'; Codehighlighter1_11_299_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />final <span style="COLOR: #000000">class Blood</span><span id="Codehighlighter1_11_299_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_11_299_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static Blood O</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Blood(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static Blood A</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Blood(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static Blood B</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Blood(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />public final static Blood AB</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Blood(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />private </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> _bloodCode;<br /><img id="Codehighlighter1_226_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_226_248_Open_Text.style.display='none'; Codehighlighter1_226_248_Closed_Image.style.display='inline'; Codehighlighter1_226_248_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_226_248_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_226_248_Closed_Text.style.display='none'; Codehighlighter1_226_248_Open_Image.style.display='inline'; Codehighlighter1_226_248_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />private Blood(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> b)</span><span id="Codehighlighter1_226_248_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_226_248_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    _bloodCode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_270_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_270_297_Open_Text.style.display='none'; Codehighlighter1_270_297_Closed_Image.style.display='inline'; Codehighlighter1_270_297_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_270_297_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_270_297_Closed_Text.style.display='none'; Codehighlighter1_270_297_Open_Image.style.display='inline'; Codehighlighter1_270_297_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />public </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> getCode()</span><span id="Codehighlighter1_270_297_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.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_270_297_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> _bloodCode;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_314_382_Open_Image" onclick="this.style.display='none'; Codehighlighter1_314_382_Open_Text.style.display='none'; Codehighlighter1_314_382_Closed_Image.style.display='inline'; Codehighlighter1_314_382_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_314_382_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_314_382_Closed_Text.style.display='none'; Codehighlighter1_314_382_Open_Image.style.display='inline'; Codehighlighter1_314_382_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />class person</span><span id="Codehighlighter1_314_382_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.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_314_382_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />private Blood _blood;<br /><img id="Codehighlighter1_362_380_Open_Image" onclick="this.style.display='none'; Codehighlighter1_362_380_Open_Text.style.display='none'; Codehighlighter1_362_380_Closed_Image.style.display='inline'; Codehighlighter1_362_380_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_362_380_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_362_380_Closed_Text.style.display='none'; Codehighlighter1_362_380_Open_Image.style.display='inline'; Codehighlighter1_362_380_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />public setBlood(Blood b)</span><span id="Codehighlighter1_362_380_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.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_362_380_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    _blood</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <p>如此Q(1Q隐藏了血型的~码l节<br />            Q?Q方便编译期间发现错?br />            Q?Q避免用超数据范围的参数</p> <img src ="http://www.tkk7.com/JavaExplore/aggbug/13255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2005-09-17 21:24 <a href="http://www.tkk7.com/JavaExplore/archive/2005/09/17/13255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat中jsp面调用javabeanhttp://www.tkk7.com/JavaExplore/archive/2005/09/17/13250.htmlJavaExploreJavaExploreSat, 17 Sep 2005 12:47:00 GMThttp://www.tkk7.com/JavaExplore/archive/2005/09/17/13250.htmlhttp://www.tkk7.com/JavaExplore/comments/13250.htmlhttp://www.tkk7.com/JavaExplore/archive/2005/09/17/13250.html#Feedback3http://www.tkk7.com/JavaExplore/comments/commentRss/13250.htmlhttp://www.tkk7.com/JavaExplore/services/trackbacks/13250.html2、嵌入java语句语法<%......%>
3、调用javabean语法<jsp:useBean id="zong" scope="page" class="test.Hello"/>
     文gHello.class位于目录web-inf\classes\test下,该jsp面与文件夹web-inf位于同一目录下?BR>4、调用javabean的属性语?lt;jsp:getProperty id="zong" property="A"/>
   cHello中要有方法getA();
5、javabean 的一般语法,构造函CؓpublicQ所有属性ؓprivateQ每个属性对应get,setҎQbooleancd属性的对应getҎ可以用is替换?BR>

JavaExplore 2005-09-17 20:47 发表评论
]]>
【原创】关于tomcat/jdk配置的全面讲解以及常见问题解{?/title><link>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13246.html</link><dc:creator>JavaExplore</dc:creator><author>JavaExplore</author><pubDate>Sat, 17 Sep 2005 12:14:00 GMT</pubDate><guid>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13246.html</guid><wfw:comment>http://www.tkk7.com/JavaExplore/comments/13246.html</wfw:comment><comments>http://www.tkk7.com/JavaExplore/archive/2005/09/17/13246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JavaExplore/comments/commentRss/13246.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JavaExplore/services/trackbacks/13246.html</trackback:ping><description><![CDATA[<P>q是我以前在<A >http://bbs.chinajavaworld.com</A>上发的一个帖?/P> <P>初来论坛Q见大家一些基问题反复的问Q很是浪Ҏ间与_֊Q下面将常见问题逐一解答QƈƢ迎各位同道跟帖写出常见问题以及解答Ҏ?BR>Q?Q、何处下载jdkQ网址Qjava.sun.com/downloads<BR>何处下蝲tomcatQ网址Q?A >http://jakarta.apache.org/site/binindex.cgi</A>q个面很长Q往下拉扑ֈtomcatQ有很多版本Q现在最新的?5.5.5-alpha exe PGP MD5 <BR>Q?Q、ؓ何安装tomcat的时候停在using jvm?x瑞星Q然后打开 控制面板Q》管理工P》服务,扑ֈ瑞星对应的全部服务都停止。然后重新安装即可成功?BR>Q?Q、安装后需要如何配|环境变量?右键单击"我的电脑"Q在弹出菜单中选择"属??pȝҎ? ?高" ?环境变量"Q?弹出环境变量对话框,可以编辑系l的环境变量了。添加PATH、JAVA_HOME、CLASSPATH、TOMCAT_HOME四个变量。PATH=你的jdk目录\bin;JAVA_HOME=你的jdk安装目录QCLASSPATH=你的jdk安装目录\lib\tools.jarQTOMCAT_HOME=你的tomcat安装目录。开启tomcat服务Q然后用:<A href="http://localhost:8080/">http://localhost:8080/</A>可以测试是不是配置成功?BR>Q?Q、tomcat的目录结构是什么样子的Q下面说一下我们会l常接触到的目录与文件。bin目录下的tomcat5.exe是tomcat服务的启动文Ӟlogs目录是一些日志文Ӟ其中stdout.log是你的System.out.println打印的目的地Q当你打开tomcat服务地dos界面Ӟ向该dos界面打印Q;webapps目录是我们的|站文g攄的地方,webapps\ROOT是tomcat的默认主늛录,可以使用<A href="http://localhost:8080">http://localhost:8080</A>来访问该目录。webapps下其他目录下的文Ӟ我们可以使用<A href="http://localhost:8080/">http://localhost:8080/</A>目录名来讉K?BR>Q?Q、ؓ何我得jsp不能正确昄中文?q个不是配置的问题,大家都知道我们可以在html文g里通过讄<meta http-equiv="Content-Type" content="text/html; charset=gb2312">让html昄中文Qjsp也是一P你设|?lt;<A href="mailto:%@page">%@page</A> contentType="text/html; charset=gb2312" Q?gt;可以显CZ文?BR>Q?Q、如何新拟目录?<BR>修改 Tomcat安装目录\conf\server.xml Q在下列行前<BR></Host><BR></Engine><BR>d下列行:<BR><Context path="/my" docBase="c:\myjsp\test" debug="0" reloadable="true"><BR></Context><BR>表示增加虚拟目录 myQ对应物理目录位|c:\myjsp\testQ若存在c:\myjsp\test\hello.jspQ则下列地址可访问:<BR>htpp://localhost:8080/my/hello.jsp<BR>修改server.xml后,需要重新启动tomcat. (转mouseLee回帖Q测试正)<BR>Q?Q、如何配|servlet?<BR>以(6Q徏立的虚拟目录Z。假如你有一个servletQMyFirstServlet。该servletW一行代码ؓQpackage com.myservlet;<BR>MyFirstServlet.class复制到c:\myjsp\test\WEB-INF\classes\com\myservlet下面Q无目录的自己新建。然后打开c:\myjsp\test\WEB-INF\web.xmlQ该文g可以从tomcat的安装目录\webapps\ROOT\WEB-INF下面复制Q,?lt;!-- JSPC servlet mappings end -->前面加入<servlet><BR><servlet-name>newServlet</servlet-name><BR><servlet-class>com.myservlet.MyFirstServlet</servlet-class><BR></servlet></P> <P><servlet-mapping><BR><servlet-name>newServlet</servlet-name><BR><url-pattern>/ceshi</url-pattern><BR></servlet-mapping><BR>然后你就可以通过htpp://localhost:8080/my/ceshi来访问你的servlet了?<BR></P><img src ="http://www.tkk7.com/JavaExplore/aggbug/13246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JavaExplore/" target="_blank">JavaExplore</a> 2005-09-17 20:14 <a href="http://www.tkk7.com/JavaExplore/archive/2005/09/17/13246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://121fj.com" target="_blank">ɫһëƬ޻Ƭȫ</a>| <a href="http://601508.com" target="_blank">һ</a>| <a href="http://kingrel.com" target="_blank">AVƬվ</a>| <a href="http://hivzx.com" target="_blank">޹Ʒˬ</a>| <a href="http://djllgs.com" target="_blank">þ99ëƬѹۿ</a>| <a href="http://gysysz.com" target="_blank">޹˳߹ۿ</a>| <a href="http://wwwxue1888.com" target="_blank">һaƵ</a>| <a href="http://njchxf.com" target="_blank">˵Ӱѹۿ</a>| <a href="http://tv695.com" target="_blank">ձɫվwwwþ</a>| <a href="http://www-474749.com" target="_blank">޹һ</a>| <a href="http://0755haoma.com" target="_blank">պӰѹۿ</a>| <a href="http://jnyygs.com" target="_blank">ɫʹۺһ</a>| <a href="http://spvec.com" target="_blank">þþƷƷɫ</a>| <a href="http://xxyy66.com" target="_blank">aëƬ</a>| <a href="http://44od.com" target="_blank">Ʒ1024</a>| <a href="http://sky233.com" target="_blank">޳ѹۿ</a>| <a href="http://fenglengqi.com" target="_blank">޹ҹĻƷվ </a>| <a href="http://bjfljg.com" target="_blank">ëƬƵվۿ</a>| <a href="http://szyxfhm.com" target="_blank">vaѹۿ</a>| <a href="http://6969xxoo.com" target="_blank">ۺ϶</a>| <a href="http://601508.com" target="_blank">þ޹Ʒ123</a>| <a href="http://zjhmpaper.com" target="_blank">ۺɫƵ</a>| <a href="http://mcjc1.com" target="_blank">йͽxxxxxѿ</a>| <a href="http://zhaofeiz.com" target="_blank">պƷĻ</a>| <a href="http://102sds.com" target="_blank">޺Ʒһ</a>| <a href="http://abab14.com" target="_blank">ۺɫƵ</a>| <a href="http://popodino.com" target="_blank">Ůcaoվѿ߿</a>| <a href="http://gzmkqp.com" target="_blank">AV뾫Ʒ</a>| <a href="http://zzhjnmzp.com" target="_blank">Ůaþþ91</a>| <a href="http://121fj.com" target="_blank">˾þô߽</a>| <a href="http://yimintech.com" target="_blank">ҹ˽ӰԺ</a>| <a href="http://zhaofeiz.com" target="_blank">999߾ƷѲ</a>| <a href="http://6878vip.com" target="_blank">һȫٸɫƬ </a>| <a href="http://www6661126.com" target="_blank">67paoǿ</a>| <a href="http://45-po.com" target="_blank">Ƭѿ</a>| <a href="http://001mc.com" target="_blank">þAV</a>| <a href="http://m0808dy.com" target="_blank">޹Ʒþþ</a>| <a href="http://wxzg66.com" target="_blank">þþƷ99Ʒɫ</a>| <a href="http://hn-hshb.com" target="_blank">˵һ </a>| <a href="http://jmzc888.com" target="_blank">Ƭһ</a>| <a href="http://zengzeyu.com" target="_blank">޾ƷƵר</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>