﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-beyond duke!-随笔分类-我的收藏</title><link>http://www.blogjava.net/beyondduke/category/4175.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:08:12 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:08:12 GMT</pubDate><ttl>60</ttl><item><title>java名人录（csdn摘）</title><link>http://www.blogjava.net/beyondduke/archive/2006/01/07/26974.html</link><dc:creator>beyondduke</dc:creator><author>beyondduke</author><pubDate>Sat, 07 Jan 2006 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/beyondduke/archive/2006/01/07/26974.html</guid><wfw:comment>http://www.blogjava.net/beyondduke/comments/26974.html</wfw:comment><comments>http://www.blogjava.net/beyondduke/archive/2006/01/07/26974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondduke/comments/commentRss/26974.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondduke/services/trackbacks/26974.html</trackback:ping><description><![CDATA[<TABLE style="FONT-SIZE: 10pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=721 border=1>
<TBODY>
<TR>
<TD><FONT size=3>Adrian Colyer</FONT></TD>
<TD><FONT size=3>AspectJ leader，AJDJ leader，IBM&nbsp;</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Ben Galbraith</FONT></TD>
<TD><FONT size=3>活跃人士</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Benjamin Renaud</FONT></TD>
<TD><FONT size=3>BEA副CTO</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Bill Burke</FONT></STRONG></TD>
<TD><FONT size=3>JBoss 架构师，EJB 3.0专家组里的Jboss代表</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Bob McWhirter</FONT></TD>
<TD><FONT size=3>Groovy,Drools founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Cliff Schmidt "><STRONG><FONT size=3>Cedric Beust</FONT></STRONG></TD>
<TD><FONT size=3>Weblogic架构师,BEA</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Cliff Schmidt "><A href="http://blog.itpub.net/post/1476/33503"><FONT size=3>Cameron Purpy</FONT></A></TD>
<TD><FONT size=3>&nbsp;JCache Lead，Tangosol公司CEO</FONT></TD>
<TD><A href="http://www.jroller.com/page/cpurdy"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD x:str="Cliff Schmidt "><FONT size=3>Cliff Schmidt&nbsp;</FONT></TD>
<TD><FONT size=3>BEA's Open source strategist and Apache Beehive leader</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Craig McClanahan</FONT></STRONG></TD>
<TD><FONT size=3>Struts founder, JSF 1.0 spec lead, Java Studio Creator leader，《Struts in action作者》, SUN</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Dion Almaer "><FONT size=3>David Nuescheler</FONT></TD>
<TD><FONT size=3>JSR 170, Content Repository for Java spec lead</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Dion Almaer "><FONT size=3><STRONG>Dion Almaer</STRONG>&nbsp;</FONT></TD>
<TD><FONT size=3>TSS主编, JDO专家组成员</FONT></TD>
<TD><FONT color=#0000cc size=3><A href="http://www.almaer.com/blog/">blog</A></FONT><FONT size=3> </FONT></TD></TR>
<TR>
<TD><FONT size=3>Doug Cutting</FONT></TD>
<TD><FONT size=3>Lucene founder</FONT></TD>
<TD><FONT size=3></FONT></TD></TR>
<TR>
<TD><FONT size=3>Ed Roman</FONT></TD>
<TD><FONT size=3>TSS CEO, MiddleWare CEO，《Mastering EJB》作者</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Erich Gamma</FONT></STRONG></TD>
<TD><FONT size=3>设计模式开创者，Eclipse 的总设计师， Junit founder，IBM</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Edward Burns</FONT></TD>
<TD><FONT size=3>JSF 1.2 spec leader</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Floyd Marinescu</FONT></TD>
<TD><FONT size=3>TSS General Manager，《EJB Design Patterns》作者</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><A href="http://blog.itpub.net/post/1476/33960"><FONT size=3>Gavin King</FONT></A></STRONG></TD>
<TD><FONT size=3>Hibernate founder,《Hibernate in Action》作者，Jboss</FONT></TD>
<TD><FONT size=3></FONT></TD></TR>
<TR>
<TD x:str="Gregor Hohpe "><FONT size=3>Gregor Hohpe&nbsp;</FONT></TD>
<TD><FONT size=3>《Enterprise Integration Patterns》作者，ThoughtWorks</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Gregor Kiczales</FONT></TD>
<TD><FONT size=3>AOP之父,AspectJ founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Graham Hamilton</FONT></STRONG></TD>
<TD><FONT size=3>Sun副总裁，J2SE1.3,1.4,5.0 leader</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><A href="http://blog.itpub.net/post/1476/33620"><FONT size=3>Hani Suleiman</FONT></A></STRONG></TD>
<TD><FONT size=3>OSWorkflow开发者，BileBlog作者</FONT></TD>
<TD><A href="http://www.jroller.com/page/fate"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Howard Lewis Ship</FONT></STRONG></TD>
<TD><FONT size=3>Tapestry和Hivemind founder，《Tapestry in Action 》作者</FONT></TD>
<TD><FONT size=3></FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>James Duncan Davidson</FONT></STRONG></TD>
<TD><FONT size=3>Ant and Tomcat founder</FONT></TD>
<TD><FONT size=3></FONT></TD></TR>
<TR>
<TD><FONT size=3>James Strachan</FONT></TD>
<TD><FONT size=3>Geronimo的发起者之一, Jakarta项目管理委员会成员,N多JSR expert group的成员</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Jason Careria "><FONT size=3><STRONG>Jason Careria</STRONG>&nbsp;</FONT></TD>
<TD x:str="Webwork2，Xwork core developer  &#13;&#10;&#13;&#10;"><FONT size=3>Webwork2，Xwork core developer&nbsp;&nbsp;</FONT></TD>
<TD><A href="http://www.jroller.com/page/jcarreira"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Jason Hunter</FONT></STRONG></TD>
<TD><FONT size=3>Apache基金会管理员，《Java Servlet Programming》作者,Xquery,Jdom等的开发者</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>John Crupi</FONT></TD>
<TD><FONT size=3>目前专著于SOA, Sun</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Jonathan Bruce "><FONT size=3>Jonathan Bruce&nbsp;</FONT></TD>
<TD><FONT size=3>JDBC spec leader,Sun</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Joshua Bloch</FONT></STRONG></TD>
<TD><FONT size=3>《Effective Java》作者，前java平台核心开发者，目前在google。</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Jon Tirsen</FONT></TD>
<TD x:str="Nanning lead developer, &#13;&#10;&#13;&#10;PicoContainer和NanoContainer活跃开者,ThoughtWorks "><FONT size=3>Nanning lead developer, PicoContainer和NanoContainer活跃开 者,ThoughtWorks&nbsp;</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Juergen Hoeler</FONT></TD>
<TD><FONT size=3>SpringFramework core developer,Co-Author Of《J2EE Development without EJB》</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Kent Beck</FONT></STRONG></TD>
<TD><FONT size=3>设计模式的开创者之一。XP 和 TDD 的创始人，xUnit 的开发者。</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Linda DeMichiel&nbsp;</FONT></TD>
<TD><FONT size=3>EJB 3.0 spec lead，Sun</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Marc Fleury</FONT></STRONG></TD>
<TD><FONT size=3>JBoss Group CEO</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Mark Hapner "><FONT size=3>Mark Hapner&nbsp;</FONT></TD>
<TD><FONT size=3>J2EE1.4 lead. Sun Chief WebService Strategist and&nbsp; JMS spec lead </FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Martin Fowler</FONT></STRONG></TD>
<TD><FONT size=3>软件工程和建模领域的大师,Thoughtworks CEO</FONT></TD>
<TD><A href="http://www.martinfowler.com/bliki/"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD><FONT size=3>Matt Raible</FONT></TD>
<TD><FONT size=3>《Spring live》作者</FONT></TD>
<TD><A href="http://www.jroller.com/page/raible"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD x:str="Pat Lightbody "><STRONG><A href="http://blog.itpub.net/post/1476/33769"><FONT size=3>Mike Cannon-Brookes</FONT></A></STRONG><FONT size=3> <BR></FONT></TD>
<TD><FONT size=3>OpenSymphony founder,Atlassian founder(JIRA的公司),<BR>&lt;Java Open Source programing&gt;作者,javablogs founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD x:str="Pat Lightbody "><FONT size=3>Pat Lightbody&nbsp;</FONT></TD>
<TD><FONT size=3>Webwork founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Patrick Linskey <BR></FONT></TD>
<TD><FONT size=3>JDO活跃人士，JDO2.0,EJB3.0专家组成员</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Rick Ross</FONT></TD>
<TD><FONT size=3>Javalobby founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Rickard Oberg</FONT></STRONG></TD>
<TD><FONT size=3>Xdoclet,Webwork founder, jboss的前架构师，目前主要研究AOP</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Robin Roos </FONT></TD>
<TD x:str="SpringFramework "><FONT size=3>JDO2.0活跃人士，《Java Data Object》作者</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><A href="http://blog.itpub.net/post/1476/33422"><FONT size=3>Rod Johnson</FONT></A></STRONG></TD>
<TD x:str="SpringFramework "><FONT size=3>SpringFramework&nbsp;</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><FONT size=3>Scott Ambler</FONT></TD>
<TD><FONT size=3>Senior Consultant， 很多书的作者</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><FONT size=3>Sergey Dmitriev</FONT></STRONG></TD>
<TD><FONT size=3>Jetbrains CEO，Intelij IDEA founder</FONT></TD>
<TD><FONT size=3>&nbsp;</FONT></TD></TR>
<TR>
<TD><STRONG><A href="http://blog.itpub.net/post/1476/33427"><FONT size=3>Ted Neward</FONT></A></STRONG></TD>
<TD><FONT size=3>《Effective Enterprise Java》作者</FONT></TD>
<TD><A href="http://neward.net/ted/weblog/index.jsp"><FONT size=3>blog</FONT></A></TD></TR>
<TR>
<TD><FONT size=3>Vincent Massol</FONT></TD>
<TD><FONT size=3>Jakarta Cactus founder，Maven开发组成员, 《Junit in action》作者</FONT></TD></TR></TBODY></TABLE><BR>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1898422187969981";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "CC0033";
google_color_url = "000000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT><img src ="http://www.blogjava.net/beyondduke/aggbug/26974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondduke/" target="_blank">beyondduke</a> 2006-01-07 13:59 <a href="http://www.blogjava.net/beyondduke/archive/2006/01/07/26974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网站收藏</title><link>http://www.blogjava.net/beyondduke/archive/2005/12/24/25284.html</link><dc:creator>beyondduke</dc:creator><author>beyondduke</author><pubDate>Sat, 24 Dec 2005 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/beyondduke/archive/2005/12/24/25284.html</guid><wfw:comment>http://www.blogjava.net/beyondduke/comments/25284.html</wfw:comment><comments>http://www.blogjava.net/beyondduke/archive/2005/12/24/25284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondduke/comments/commentRss/25284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondduke/services/trackbacks/25284.html</trackback:ping><description><![CDATA[
		<font size="2">apache下载：</font>
		<a href="http://apache.justdn.org/">
				<font size="2">http://apache.justdn.org/</font>
		</a>
		<br />
		<font size="2">java视线论坛：</font>
		<a href="http://www.hibernate.org.cn/">
				<font size="2">http://www.hibernate.org.cn/</font>
		</a>
		<br />
		<font size="2">TSS：</font>
		<a href="http://www.theserverside.com/index.tss">
				<font size="2">http://www.theserverside.com/index.tss</font>
		</a>
		<br />
		<font size="2">W3schools ：</font>
		<a href="http://www.theserverside.com/index.tss">
				<font size="2">http://www.theserverside.com/index.tss</font>
		</a>
		<br />
		<font size="2">java天下社区：</font>
		<a href="http://www.wnetw.com/jclub/">
				<font size="2">http://www.wnetw.com/jclub/</font>
		</a>
		<br />
		<font size="2">灰狐OpenSource：</font>
		<a href="http://www.huihoo.com/sites.html">
				<font size="2">http://www.huihoo.com/sites.html</font>
		</a>
		<br />
		<font size="2">相对美女私房菜：</font>
		<a href="http://blog.sina.com.cn/u/1494856974#feeds_FEEDS_1494856974">
				<font size="2">http://blog.sina.com.cn/u/1494856974#feeds_FEEDS_1494856974</font>
		</a>
		<br />
		<font size="2">java developer examaple：</font>
		<a href="http://javaalmanac.com/egs/index.html">
				<font size="2">http://javaalmanac.com/egs/index.html</font>
		</a>
		<br />
		<font size="2">新东方美文：</font>
		<a href="http://www.neworiental.org/Default.aspx?Tabid=450">
				<font size="2">http://www.neworiental.org/Default.aspx?Tabid=450</font>
		</a>
		<br />
		<font size="2">javascript学习：</font>
		<a href="http://javascriptkit.com/">
				<font size="2">http://javascriptkit.com/</font>
		</a>
		<br />
		<font size="2">ajax matter：</font>
		<a href="http://www.ajaxmatters.com/r/resources?id=17">
				<font size="2">http://www.ajaxmatters.com/r/resources?id=17</font>
		</a>
		<br />
		<font size="2">linux论坛：</font>
		<a href="http://www.linuxsir.org/bbs/">
				<font size="2">http://www.linuxsir.org/bbs/</font>
		</a>
		<br />
		<font size="2">dev2dev：</font>
		<a href="https://www.dev.java.net/servlets/ProjectList">
				<font size="2">https://www.dev.java.net/servlets/ProjectList</font>
		</a>
		<br />bjug：<a href="http://www.bjug.org/">http://www.bjug.org/</a><br /><br /><div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="/rocky/archive/2005/12/22/25074.html"><font color="#646464" size="2">我最喜欢的java技术站点</font></a><font size="2"> （摘）</font></div><p><font size="2">一、TSS(</font><a href="http://www.theserverside.com/"><font color="#6fbc4c" size="2">http://www.theserverside.com</font></a><font size="2">):全球最多的J2EE用户站点，里边经常会有大牛辩论。象咱们这种虾米就在旁边偷着乐吧，高手往往在冲动的时候才会把压箱底的真功夫搬出来施展。<br />二、javaeye(</font><a href="http://www.javaeye.com/"><font color="#6fbc4c" size="2">http://www.javaeye.com</font></a><font size="2">):起初robbin在jdon中跟斑竹冲突后自己创办的一个论坛，帖子不多，但是仔细观看很值得玩味。喜欢这个地方里边自由的气氛。<br />三、matrix(</font><a href="http://www.matrix.org.cn/"><font color="#6fbc4c" size="2">http://www.matrix.org.cn</font></a><font size="2">):开始是被这里的免费下载书籍吸引，后来matrix论坛里边山头建多了后才逛一逛，多数只看不回，有点惭愧了。<br />四、blogjava(</font><a href="/"><font color="#6fbc4c" size="2">http://www.blogjava.net</font></a><font size="2">):现在有点专业java blog的氛围了，希望继续努力,创办中国java之家。<br />五、spring英文论坛(</font><a href="http://forum.springframework.org/"><font color="#6fbc4c" size="2">http://forum.springframework.org</font></a><font size="2">):这个里边帖子很多，而且很容易得到解决的方案。我每天必逛之地,有N多好玩的东东。<br />六、hibernate论坛(</font><a href="http://www.hibernate.org):hibernate/"><font color="#6fbc4c" size="2">http://www.hibernate.org):hibernate</font></a><font size="2">的官方论坛<br />七、IBM developerworks中国(</font><a href="http://www-128.ibm.com/developerworks/cn/"><font color="#6fbc4c" size="2">http://www-128.ibm.com/developerworks/cn/</font></a><font size="2">):学院味太浓，不太喜欢<br />八、BEA dev2dev在线(</font><a href="http://dev2dev.bea.com.cn/"><font color="#6fbc4c" size="2">http://dev2dev.bea.com.cn/</font></a><font size="2">):比IBM的好一点，还是学院派<br />源代码下载：<br />一、sourceforge(</font><a href="http://sourceforge.net/"><font color="#6fbc4c" size="2">http://sourceforge.net</font></a><font size="2">):全球最大的开源基地，里边有好多java的开源代码。<br />二、java开源大全(</font><a href="http://www.open-open.com/"><font color="#6fbc4c" size="2">http://www.open-open.com</font></a><font size="2">):中文的简单介绍，偶尔上去看看。<br /></font></p><div class="postcontent"><font size="2">每年的全球四大Java研讨会，它们的agenda，给大家提供了一个捉摸Java时尚风向的便利。<br />每年花几天看一遍它们share出来的slides，是CTO该做的事情。<br /><br />PS. 如果你被邀在哪里做讲演，又想不到给下面那些似睡似醒的猪头说什么的，可以从中参考一二。<br />PS2.在迷宫一样的网站中翻滚了半个小时，把agenda和slides的链接都整理了出来，便人便己。<br /><br /></font><a href="http://javasymposium.techtarget.com/"><font color="#366900" size="2">TheServerSide Symposium</font></a><font size="2"> 对很多人来说，TheServerSide才是真正的Java官方社区--</font><a href="http://javasymposium.techtarget.com/html/js_at_a_glance.htm"><font color="#366900" size="2">06年的agenda</font></a><font size="2">。<br /><br /></font><a href="http://javapolis.com/"><font color="#366900" size="2">JavaPoils</font></a><font size="2"> 欧洲最大的Java研讨会-- </font><a href="http://www.javapolis.com/confluence/display/JP05/JavaPolis+University+Slides"><font color="#366900" size="2">05年(1)</font></a><font size="2">，</font><a href="http://www.javapolis.com/confluence/display/JP05/JavaPolis+Conference+Slides"><font color="#366900" size="2">05年(2)</font></a><font size="2">，  </font><a href="http://wiki.javapolis.com/confluence/display/JP05/JavaPolis+2004+talks"><font color="#366900" size="2">04年的ppt</font></a><font size="2"> (需简单注册）。<br /><br /></font><a href="http://java.sun.com/javaone/"><font color="#366900" size="2">Java One</font></a><font size="2"> 官方，官方.....--</font><a href="http://developers.sun.com/learning/javaoneonline/"><font color="#366900" size="2">05,04年的ppt</font></a><font size="2">。<br /><br /></font><a href="http://www.nofluffjuststuff.com/"><font color="#366900" size="2">No Fluff Just Stuff tour</font></a><font size="2">  简称NFJS的大马戏团，最近的</font><a href="http://www.thespringexperience.com/"><font color="#366900" size="2">Spring Experience</font></a><font size="2">也是和它一起搞的-- </font><a href="http://www.nofluffjuststuff.com/past.jsp"><font color="#366900" size="2">过往的Agenda</font></a><font size="2">，</font><a href="http://www.nofluffjuststuff.com/blogs_summary.jsp"><font color="#366900" size="2">Spearker的blog聚合</font></a><font size="2">。 </font></div><p><font size="2">目前的四大山头，还处于互不竞争的形态，而且大家都有当年国共合作时期的精神，互相加入对方的组织。</font></p><div><font size="2"></font> </div><div><font size="2">　　JavaEye(</font><a href="http://forum.javaeye.com/"><font color="#003300" size="2">http://forum.javaeye.com</font></a><font size="2">)：以BBS论坛为交流形式，站长是Robbin，成立最早，人数最多，宝贝最多。当然，灌水的也最多。开放式的会员注册机制，但是必须经过漫长的15天等待，才能发言。不过浏览是完全自由的。</font></div><div><font size="2"></font> </div><div><font size="2">　　BJUG(</font><a href="http://www.bjug.org/"><font color="#003300" size="2">http://www.bjug.org</font></a><font size="2">)：以Google Group提供的Maillist为交流形式，主要的管理者是冰云，以北京Java用户为主，以定期聚会交流技术作为加强凝聚力的手段，目前有100多个会员，已经早就不再局限于北京Javer了。加入BJUG并不容易，必须有介绍人，否则是进不去的。全球Java User Group中的Top 50。</font></div><div><font size="2"></font> </div><div><font size="2">　　一座千年的妖精旅店(</font><a href="http://blogsite.3322.org/qq2/history.cgi"><font color="#003300" size="2">http://blogsite.3322.org/qq2/history.cgi</font></a><font size="2">)：以QQ群聊天为交流形式，主要的管理者是江南白衣，里面高手众多，不过也让我们看到了高手们大喷口水的本色场面。虽然白衣始终不渝的告诫大家要提高聊天质量，但是跑题是经常发生的。同样很难加入，必须有人介绍，就算进去了，人缘混得差的，也还会被踢出来。可以说是最封闭的山头了。但是这样的山头大有好处，真有什么难事，在里面喊一声，真正的大侠就会出来救你的。</font></div><div><font size="2"></font> </div><div><font size="2">　　BlogJava(</font><a href="/"><font color="#003300" size="2">http://www.blogjava.net/</font></a><font size="2">)：以专业技术Blog为发布形式（Blog本来就不是很利于交流，但是很利于观点、心得与资源的发布）。主要的管理者是</font><a href="/dudu/"><font color="#003300" size="2">dudu</font></a><font size="2">，但是现在江南白衣也加入了BlogJava，正在四处拉人加入那里。目前一派欣欣向荣的景象。普通Bloger申请需要等待批准，认识白衣或者其它管理员的，可以走后门。</font></div><div><font size="2"></font> </div><div><font size="2">　　基本上我的理解还是很片面的，没有被提到的网站、站长、社团、群众小团体、组织、帮会，大家多见谅。尤其应该算一个山头的</font><a href="http://java.csdn.net/"><font color="#003300" size="2">CSDN Java频道</font></a><font size="2">，目前的确还算不上一个山头，遗憾ing......</font></div><p><font size="2"><br /><br />2006年12月19日更新：<br /><br />1，<a href="http://www.bewww.net/index.html">http://www.bewww.net/index.html</a>   IT公司速查手册，能基本了解所查IT公司的缺点。<br />2，<a href="http://www.cec-ceda.org.cn/channel/dlk/">http://www.cec-ceda.org.cn/channel/dlk/</a>  管理大师德鲁克，一个朋友介绍给我的老师。<br />3，<a href="http://www.linuxvirtualserver.org/zh/lvs1.html">http://www.linuxvirtualserver.org/zh/lvs1.html</a>  Linux集群项目。<br /><br /></font></p><img src ="http://www.blogjava.net/beyondduke/aggbug/25284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondduke/" target="_blank">beyondduke</a> 2005-12-24 10:39 <a href="http://www.blogjava.net/beyondduke/archive/2005/12/24/25284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java设计模式之策略模式篇（摘）</title><link>http://www.blogjava.net/beyondduke/archive/2005/12/24/25283.html</link><dc:creator>beyondduke</dc:creator><author>beyondduke</author><pubDate>Sat, 24 Dec 2005 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/beyondduke/archive/2005/12/24/25283.html</guid><wfw:comment>http://www.blogjava.net/beyondduke/comments/25283.html</wfw:comment><comments>http://www.blogjava.net/beyondduke/archive/2005/12/24/25283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beyondduke/comments/commentRss/25283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beyondduke/services/trackbacks/25283.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=title vAlign=center align=middle height=56><B><FONT color=#ff0000><FONT size=2><SPAN class=p16>Java设计模式之策略模式篇</SPAN><BR><!-- #EndEditable --></FONT></FONT></B></TD></TR>
<TR>
<TD class=formtitle align=middle height=40><!-- #BeginEditable "2" --><FONT size=2>作者：冯睿 本文选自：赛迪网 2003年02月27日 <BR><!-- #EndEditable --></FONT></TD></TR></TBODY></TABLE>
<TABLE height=73 cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=content><!-- #BeginEditable "3" -->
<P class=content><FONT size=2></FONT>&nbsp;</P><SPAN class=p11b><FONT size=2>策略模式（Strategy Pattern）中体现了两个非常基本的面向对象设计的基本原则：封装变化的概念；编程中使用接口，而不是对接口实现。策略模式的定义如下：<BR><BR>定义一组算法，将每个算法都封装起来，并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。<BR><BR>策略模式使开发人员能够开发出由许多可替换的部分组成的软件，并且各个部分之间是弱连接的关系。弱连接的特性使软件具有更强的可扩展性，易于维护；更重要的是，它大大提高了软件的可重用性。<BR><BR>为了说明策略模式，我们将首先讨论一下在Swing中是如何利用策略模式来绘制组件边界的，然后讨论在Swing中使用策略模式带来的好处，最后讨论如何在软件中实现策略模式。<BR><BR></FONT>
<CENTER><FONT color=#000099 size=2><STRONG>Swing边框</STRONG></FONT></CENTER><BR><BR><FONT size=2>对所有的Swing组件，例如按钮、列表单等，都还可以绘制边框。在Swing中提供了各种边框类型，例如bevel、etched、line、titled等。Swing组件的边框是通过JComponent类来绘制的，该类是所有Swing组件的基类，实现了所有Swing组件公共的功能。在JComponent中有一个paintBorder()方法，该方法为组件绘制边框。Swing的开发人员可以象下面的例子中所示那样来绘制边框：<BR><BR><CCID_NOBR></FONT>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>// 一段实现paintBorder（）方法代码
protected void paintBorder(Graphics g) {
   switch(getBorderType()) {
      case LINE_BORDER:   paintLineBorder(g);
                          break;
      case ETCHED_BORDER: paintEtchedBorder(g);
                          break;
      case TITLED_BORDER: paintTitledBorder(g);
                          break;
      ...
   }
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR><FONT size=2>请注意上面的代码只是一种假设，事实上Swing的开发人员并没有这样实现paintBorder（）方法。在上面的代码中，在JComponent中绘制边框的代码被直接写入了paintBorder（）方法中，这意味着JComponent和绘制边框的功能被紧密地结合在了一起。很自然地大家会联想到如果需要实现一种新的边框类型，开发人员必须修改至少三处代码：首先增加一个常量，该常量代表新添加的边框的类型值；其次需要在Switch语句中增加一个case语句；最后开发人员需要实现paintXXXBorder（）方法，其中XXX代表新边框的名称。<BR><BR>很显然要扩展上面paintBorder()方法的功能是一件很困难的事情，不仅仅是因为开发人员需要增加一种新的边框类型，更麻烦的是开发人员很难修改JComponent类。JComponent类已经被编译到了Swing的开发工具中，如果开发人员想修改它的话，必须获得Swing的源代码，修改后重新编译Swing。同时在用户的计算机上与需要使用新编译的Swing API。另外所有的Swing组件都可以使用开发人员新添加的边框类型。有可能开发人员只希望新的边框被某些组件使用，但是现在开发人员无法对使用该边框的组件进行限制。<BR><BR>开发人员有更好的实现方法吗？答案就是策略模式。通过策略模式，可以将JComponent和实现绘制边框的代码分离开来，这样开发人员在增加或修改绘制边框的代码使就不需要修改JComponent的代码。通过应用策略模式，开发人员将变化的概念（在这个例子中是绘制边框）封装起来，然后通过一个Border接口，使程序能够重用绘制边框的功能。下面让我们来看JComponent是如何利用策略模式来实现绘制边框的功能的：<BR><BR><CCID_NOBR></FONT>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>// Swing中paintBorder()方法的源代码
protected void paintBorder(Graphics g) {
   Border border = getBorder();
   if (border != null) {
      border.paintBorder(this, g, 0, 0, getWidth(), getHeight());
   }
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR><FONT size=2>上面的paintBorder()方法通过一个border对象绘制了组件的边框。这样border对象替代了前一个例子中的JComponent封装了边框绘制的功能。我们还应该注意到JComponent将一个对自己的引用传递给了Border.paintBorder（）方法，这是因为Border的实例必须知道它对应的组件的信息，这种方式通常被称为委托。通过这种方式，一个对象可以将功能委托给另一个对象来实现。<BR><BR>在JComponent类中引用了一个Border对象，通过JComponent.getBorder（）方法可以获得该Border对象。下面的代码演示了如何设定和获得Border对象：<BR><BR><CCID_NOBR></FONT>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>...
private Border border;
...
public void setBorder(Border border) {
   Border oldBorder = this.border;
   this.border = border;
   firePropertyChange("border", oldBorder, border);
   if (border != oldBorder) {
      if (border == null || oldBorder == null || !(border.getBorderInsets(this).
                                    equals(oldBorder.getBorderInsets(this)))) {
         revalidate();
      }       
      repaint();
   }
}
...
public Border getBorder() {
   return border;
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR><FONT size=2>当开发人员通过JComponent.setBorder（）方法设定了一个组件的边框后，JComponent类发出一个属性更新事件。如果新的边框和以前的边框不同的话，setBorder（）方法就重新绘制边框。getBorder（）方法仅仅返回对Border对象的引用。图1显示了Border的类结构图：<BR><BR></FONT>
<CENTER><FONT size=2><IMG height=305 src="http://www.uml.org.cn/sjms/99506.jpg" width=400></FONT></CENTER><BR><BR>
<CENTER><FONT size=2>图1 Border的类结构图</FONT></CENTER><BR><BR><FONT size=2>通过类结构图我们可以看到，JComponent类中保存了一个对Border对象的引用。由于Border是一个接口，Swing组件可以使用任何一个实现了Border接口的类。<BR><BR>现在我们已经知道了JComponent是如何利用策略模式来绘制组件的边框的。下面让我们通过实现一个新的边框类型来测试一下它的可扩展性。<BR><BR></FONT>
<CENTER><FONT color=#000099 size=2><STRONG>实现一个新的边框类型</STRONG></FONT></CENTER><BR><BR><FONT size=2>图2中是一个有三个JPanel对象的小程序，每个JPanel对象有各自不同的边框，每个边框对应一个HandleBorder实例。<BR><BR></FONT>
<CENTER><FONT size=2><IMG height=144 src="http://www.uml.org.cn/sjms/99507.jpg" width=400></FONT></CENTER><BR><BR>
<CENTER><FONT size=2>图2 新的边框类型</FONT></CENTER><BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>// HandleBorder.java
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class HandleBorder extends AbstractBorder {
   protected Color lineColor;
   protected int thick;
   public HandleBorder() {
      this(Color.black, 6);
   }
   public HandleBorder(Color lineColor, int thick) {
      this.lineColor = lineColor;
      this.thick = thick;
   }
   public void paintBorder(Component component, 
                                  Graphics g, int x, int y, int w, int h) {
      Graphics copy = g.create();
      if(copy != null) {
         try {
            copy.translate(x,y);
            paintRectangle(component,copy,w,h);
            paintHandles(component,copy,w,h);
         }
         finally {
            copy.dispose();
         }
      }
   }
   public Insets getBorderInsets() {
      return new Insets(thick,thick,thick,thick);
   }
   protected void paintRectangle(Component c, Graphics g,
                           int w, int h) {
      g.setColor(lineColor);
      g.drawRect(thick/2,thick/2,w-thick-1,h-thick-1);
   }
   protected void paintHandles(Component c, Graphics g,
                           int w, int h) {
      g.setColor(lineColor);
      g.fillRect(0,0,thick,thick); 
      g.fillRect(w-thick,0,thick,thick); 
      g.fillRect(0,h-thick,thick,thick); 
      g.fillRect(w-thick,h-thick,thick,thick); 
      g.fillRect(w/2-thick/2,0,thick,thick); 
      g.fillRect(0,h/2-thick/2,thick,thick); 
      g.fillRect(w/2-thick/2,h-thick,thick,thick); 
      g.fillRect(w-thick,h/2-thick/2,thick,thick); 
   }   
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR><FONT size=2>HandleBorder类继承了javax.swing.border.AbstractBorder类并重写了paintBorder（）和getBorderInsets（）。HandleBorder是如何实现的其实并不重要，重要的是由于Swing使用了策略模型，开发人员能够很方便地增加新的边框类型。下面的代码显示了如何使用HandleBorder类。在这个例子中创建了三个JPanel对象，并对每个JPanel对象设定一个HandleBorder实例作为边框。<BR><BR><CCID_NOBR></FONT>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>// Test.java
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame {
   public static void main(String[] args) {
      JFrame frame = new Test();
      frame.setBounds(100, 100, 500, 200);
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.show();
   }
   public Test() {
      super("实现一个新的边框类型");
      Container contentPane = getContentPane();
      JPanel[] panels = { new JPanel(), 
                     new JPanel(), new JPanel() };
      Border[] borders = { new HandleBorder(),
                     new HandleBorder(Color.red, 8),
                     new HandleBorder(Color.blue, 10) };
      contentPane.setLayout(
               new FlowLayout(FlowLayout.CENTER,20,20));
      for(int i=0; i &lt; panels.length; ++i) {
         panels[i].setPreferredSize(new Dimension(100,100));
         panels[i].setBorder(borders[i]);
         contentPane.add(panels[i]);
      }
   }
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR><FONT size=2>还记得在上面的例子中曾提到在有些情况下，对组件的引用会作为参数传递给Border.paintBorder（）方法。虽然上面的HandleBorder类没有保存对组件的引用，但是有些情况下Border接口的实现类会使用到对组件的引用并从中获得关于组件的信息。例如在EtchedBorder中，paintBorder（）方法通过对组件的引用获得它对应的组件的阴影和高光色：<BR><BR><CCID_NOBR></FONT>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>
<FONT size=2>// 下面的代码截取自javax.swing.border.EtchedBorder
public void paintBorder(Component component, Graphics g, int x, int y, 
                         int width, int height) {
   int w = width;
   int h = height;
   g.translate(x, y);
   g.setColor(etchType == LOWERED? getShadowColor(component) : 
getHighlightColor(component));
   g.drawRect(0, 0, w-2, h-2);
   g.setColor(etchType == LOWERED? getHighlightColor(component) : 
getShadowColor(component));
   g.drawLine(1, h-3, 1, 1);
   g.drawLine(1, 1, w-3, 1);
   g.drawLine(0, h-1, w-1, h-1);
   g.drawLine(w-1, h-1, w-1, 0);
   g.translate(-x, -y);
}</CCID_CODE>
</FONT></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>
<CENTER><FONT color=#000099 size=2><STRONG>如何实现策略模型</STRONG></FONT></CENTER><BR><BR><FONT size=2>通过以下步骤，开发人员可以很容易地在软件中实现策略模型：<BR><BR>1．对策略对象定义一个公共接口。<BR><BR>2．编写策略类，该类实现了上面的公共接口。<BR><BR>3．在使用策略对象的类中保存一个对策略对象的引用。<BR><BR>4．在使用策略对象的类中，实现对策略对象的set和get方法。<BR><BR>在Swing边框的例子中，公共接口是javax.swing.Border。策略类是LineBorder、EtchedBorder、HandleBorder等。而使用策略对象的类是JComponent。<BR></FONT></SPAN></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/beyondduke/aggbug/25283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beyondduke/" target="_blank">beyondduke</a> 2005-12-24 10:09 <a href="http://www.blogjava.net/beyondduke/archive/2005/12/24/25283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>