??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成电影在线观看青青,国产成人亚洲综合色影视,久久亚洲伊人中字综合精品http://www.tkk7.com/menlong999/archive/2012/10/18/389853.htmlLv YuanfangLv YuanfangThu, 18 Oct 2012 15:48:00 GMThttp://www.tkk7.com/menlong999/archive/2012/10/18/389853.htmlhttp://www.tkk7.com/menlong999/comments/389853.htmlhttp://www.tkk7.com/menlong999/archive/2012/10/18/389853.html#Feedback0http://www.tkk7.com/menlong999/comments/commentRss/389853.htmlhttp://www.tkk7.com/menlong999/services/trackbacks/389853.htmlhttp://adrop.me/ 


Lv Yuanfang 2012-10-18 23:48 发表评论
]]>
Bayeux协议http://www.tkk7.com/menlong999/archive/2009/08/16/291365.htmlLv YuanfangLv YuanfangSun, 16 Aug 2009 09:42:00 GMThttp://www.tkk7.com/menlong999/archive/2009/08/16/291365.htmlhttp://www.tkk7.com/menlong999/comments/291365.htmlhttp://www.tkk7.com/menlong999/archive/2009/08/16/291365.html#Feedback0http://www.tkk7.com/menlong999/comments/commentRss/291365.htmlhttp://www.tkk7.com/menlong999/services/trackbacks/291365.html阅读全文

Lv Yuanfang 2009-08-16 17:42 发表评论
]]>
工作W记分nhttp://www.tkk7.com/menlong999/archive/2008/10/02/232121.htmlLv YuanfangLv YuanfangThu, 02 Oct 2008 12:24:00 GMThttp://www.tkk7.com/menlong999/archive/2008/10/02/232121.htmlhttp://www.tkk7.com/menlong999/comments/232121.htmlhttp://www.tkk7.com/menlong999/archive/2008/10/02/232121.html#Feedback0http://www.tkk7.com/menlong999/comments/commentRss/232121.htmlhttp://www.tkk7.com/menlong999/services/trackbacks/232121.html 工作W记分n国庆假期中,_略看了下Unix|络~程卷一Q套接字API。进一步加׃对Linux、Unix下的socket处理。重Ҏ非阻塞、select多\复用{。记录笔记几。其他笔Cؓ日常摘录{?br>用Google Notebook记录Q特发布和大家分享:
学习W记Q?br>http://www.google.com/notebook/public/09783819863799136882/BDRihIgoQtMHZkLoh?hl=zh-CN
日常W记Q?br>http://www.google.com/notebook/public/09783819863799136882/BDRihIgoQlOD34rMh?hl=zh-CN





Lv Yuanfang 2008-10-02 20:24 发表评论
]]>
Java、Linux、C++电子书分?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/28/231737.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Sun, 28 Sep 2008 13:21:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/28/231737.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/231737.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/28/231737.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/231737.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/231737.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;"><strong> Java、Linux、C++电子书分?/strong></h1> <br /> 收藏的一些电子书Q跟大家分n下。部分java书有下蝲链接Q其他的都是抓图Q都攑֜<a title="Dropbox" id="b25h">Dropbox</a> Q文件在U存储、同步、共享服务,2G免费I间Q有windows、linux客户端,本地文g和服务器׃n可以同步Q的׃n上。需要的可以到Dropbox首页注册Q告诉我你的帐号后,我可以把׃n开攄你。我的帐Pmenlong999@gmail.com<br /> Dropbox很不错,客户端速度很快Q还有版本控Ӟ强烈推荐Q?br /> <h1><strong>Java</strong></h1> Java与模式: 阎宏的Java设计模式Q讲的很?br /> JSP2.0技术手册(部分Q?br /> thinking in java 中文版第三版Q全Q:不用多介l了<br /> <a title="j-nio.zip" id="unl1">j-nio.zip</a> QIBM developerWorks上java.nio教程Q很不错Q带源码<br /> <a title="JUnit.in.Action中文?pdf" id="tggk">JUnit.in.Action中文?pdf</a> <br /> <a title="OReilly.Java.I.O.2nd.Edition.May.2006.chm" id="y4h9">OReilly.Java.I.O.2nd.Edition.May.2006.chm</a> <br /> <a title="OReilly.Java.Network.Programming.Third.Edition.Oct.2004.chm" id="hn2:">OReilly.Java.Network.Programming.Third.Edition.Oct.2004.chm</a> <br /> <a title="starting-struts2-chinese.pdfQ中文的InfoQ Struts2q你? id="owk7">starting-struts2-chinese.pdfQ中文的InfoQ Struts2q你?/a> <br /> <a title="Java NIO-Developing High Performance Applications.pdf" id="vm1j">Java NIO-Developing High Performance Applications.pdf</a> <br /> <a title="Struts 2 in Action.pdf" id="mn6u">Struts 2 in Action.pdf</a> <br /> <a title="UML for Java Programmers中文?pdf" id="gsm5">UML for Java Programmers中文?pdf</a> <br /> <a title="实用J2EE设计模式~程指南.pdf" id="c0wl">实用J2EE设计模式~程指南.pdf</a> Q比较老的Q不q也不错Q怀旧一?br /> <br /> <h1>Linux</h1> <div class="as42aeo" id="flkg" style="padding: 1em 0pt; text-align: left;"><img style="width: 250px; height: 172px;" src="http://docs.google.com/File?id=ah897shxqwtx_176g25fh75c_b" alt="" /></div> <h1>C++</h1> <div class="wcioak2" id="ht2w" style="padding: 1em 0pt; text-align: left;"><img style="width: 251px; height: 139px;" src="http://docs.google.com/File?id=ah897shxqwtx_177xtrzzndj_b" alt="" /></div> <h1>其他</h1> <div class="yaesue2" id="woag" style="padding: 1em 0pt; text-align: left;"><img style="width: 265px; height: 121px;" src="http://docs.google.com/File?id=ah897shxqwtx_178gswgxvhm_b" alt="" /></div> <br /> <div class="i4qsm2y" id="qom-" style="padding: 1em 0pt; text-align: left;"><br /> </div> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/menlong999/aggbug/231737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-28 21:21 <a href="http://www.tkk7.com/menlong999/archive/2008/09/28/231737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet与模板方法模?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/17/229332.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Wed, 17 Sep 2008 01:40:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/17/229332.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/229332.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/17/229332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/229332.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/229332.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;">Servlet与模板方法模?/h1> <h2 style="text-align: right;">----Head First Pattern之模板方法模?/h2> <br /> q? q头大家都用strutsQ或者其他MVC框架Q很有人直接用Servlet了吧Q但是相信大部分人都应该知道怎么写Servlet的吧Q? HttpServletc,覆盖里面的doGet、doPostҎ卛_Q大部分情况下,我们都是对GET和POST一样处理,一般也p么写了:<br /> public MyServlet extends HttpServlet{<br />     public void doGet(HttpServletRequest request, HttpServletResponse response){<br />         // 处理<br />     }<br />     public void doPost()HttpServletRequest request, HttpServletResponse response){<br />         // 不关心get、posthQ因此post处理直接调用get处理<br />         doGet(request, response);<br />     }<br /> }<br /> Servlet只要在web.xml中部|好之后Q就可以处理览器的h了。上面代码可以看出来QdoGetҎ处理览器的GEThQdoPost处理POSTh?br /> Servlet是由Tomcat之类的servlet容器来调用处理浏览器h的,q要集成基cHttpServletQ如果大家查看HttpServlet源码的时候,׃发现Q其实里面有一?br /> <strong><font color="#0000ff">protected</font></strong> <strong><font color="#0000ff">void</font></strong> service(<a ><font color="#ff0000"><u>HttpServletRequest</u></font></a> req, <a ><font color="#ff0000"><u>HttpServletResponse</u></font></a> resp)<br /> ҎQservlet容器实际调用的是serviceҎQserviceҎ的实现就是根据HTTPh的类型(GET、POSTQ还是其他)Q将处理委派ldoGet、doPost{方法,p些子cȝҎ来最l处理浏览器的请求?br /> <br /> 由此可以看出QHttpServlet定义了一个处理的框架或者说模板Q实现Servlet只需l承HttpServletq实现doGet、doPost{方法即可?br /> <br /> 是引出模板方法模式定义的时候了Q?strong>模板Ҏ模式Q在一个方法中定义一个算法的骨架Q将某些步骤推迟到子cM实现。模板方法允许子c重新定义算法的某些步骤Q而不改变法的结构?/strong><br /> 单UMLcd如下Q?br /> <div class="44u2qua" id="cko6" style="padding: 1em 0pt; text-align: left;"><img style="width: 140px; height: 122px;" src="http://docs.google.com/a/acubalance.ca/File?id=ah897shxqwtx_173gbvrx5cw_b" alt="" /></div> 单实C个抽象类Q?br /> public abstract Template{<br />     public void <strong>final </strong>templateMethod(){<br />         step1();<br />         step2();<br />         hook();<br />     }<br />     public abstract void step1();<br />     public abstract void step2();<br />     <strong>public void hook(){}</strong><br /> }<br /> <br /> q个抽象c,定义了一个算法的骨架Q需要step1、step2Q都是抽象方法,需要子cL实现。而templateMethod是final的,即不允许子类覆盖。其中定义了Ҏ的步骤,step1、step2?br /> 如下为具体实玎ͼ<br /> public ConcreteTemplate extends Template{<br />     public void step1(){System.out.println("step1");}<br />     public void step2(){System.out.println("step2");}<br />     public void hook(){System.out.println("hook");}<br />     public static void main(String[] args){<br />         Template temp = new ConcreteTemplate();<br />         temp.templateMethod();<br />     }<br /> }<br /> <br /> 可以看到其中加入了一个hookҎQ即钩子Ҏ。hookҎ在抽象类中的实现为空Q是留给子类做一些可选的操作。如果某个子c需要一些特D额外的操作Q则可以实现hookҎQ当然也可以完全不用理会Q因为hook在抽象类中只是空Ҏ而已?br /> <br /> 其他扩展Q?br /> 1.可以定义多个hookҎ<br /> 2.hookҎ可以定义一个返回ؓboolean的方法,有子cL军_是否调用hookҎ?br /> egQ抽象类的templateMethod可以q样实现Q?br />     public void <strong>final </strong>templateMethod(){<br />         step1();<br />         step2();<br />         if(allowHook())<br />             hook();<br />     }<br />     public boolean allowHook(){return true;}<br />     public void hook(){}<br /> 子类中可以覆盖allowHookQ以军_是否调用hookҎ?br /> 3.抽象cd义的步骤Q可以有默认实现Q而非全是abstractҎ。HttpServlet中已l有doGet、doPost{方法的默认实现Q大家可以参考其源码实现?br /> <br /> 更好的一个模板方法的例子是AppletQ实现自qAppletQ必ȝ承自AppletQ里面实现init、start、stop、destroy{方法即可。这些方法都是有默认实现的,如果看源码,可以发现默认实现其实都是I?br /> <br /> <strong>了解模板Ҏ模式之后Q大家可能意识到Servletq且完全按照模板Ҏ定义的那P而是有一些区别,比如提供默认doGet、doPost的实现等。这都说明,在实际编E中Qƈ非生搬硬套设计模式,而是Ҏ实际Q会做些变动或变形,但其本质不变?br /> 不能Z模式而模式。那I竟什么时候需要设计模式呢Q个人理解,当你发现你的cL问题的时候,比如有重复代码了Q感觉有些不对劲了,感觉不适应以后的扩充了Q这时候不妨考虑下,是不是该设计模式出场了。?br /> Ua个h理解。。有不当之处Q请及时拍砖。?/strong><br /> <br /> <img src ="http://www.tkk7.com/menlong999/aggbug/229332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-17 09:40 <a href="http://www.tkk7.com/menlong999/archive/2008/09/17/229332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不能在Google Docs上直接发布到blogjava了?Q?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/17/229285.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Tue, 16 Sep 2008 16:02:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/17/229285.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/229285.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/17/229285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/229285.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/229285.html</trackback:ping><description><![CDATA[我写东西Q都是在Google Docs上写Q然后用Docs的发布功能,发布到blog上。以前的几篇都可以顺利发布到blogjava上,也没有ؕ码,以前在csdn上有q。今天突然不能发布了Q也没有M错误提示。是Google Docs的问题,q是blogjava的问题?<br /> 有h像我q样用docs写,然后发布blog吗?<br /> <br /> <img src ="http://www.tkk7.com/menlong999/aggbug/229285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-17 00:02 <a href="http://www.tkk7.com/menlong999/archive/2008/09/17/229285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ud盘与适配器模?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/15/229011.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Mon, 15 Sep 2008 09:53:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/15/229011.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/229011.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/15/229011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/229011.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/229011.html</trackback:ping><description><![CDATA[ <P ALIGN=CENTER STYLE="margin-top: 0.17in; margin-bottom: 0.04in"><FONT FACE="宋体, SimSun"><FONT SIZE=4><B>Ud盘与适配器模?/B></FONT></FONT></P> <P ALIGN=RIGHT STYLE="margin-top: 0.17in; margin-bottom: 0.04in; line-height: 130%"> <FONT FACE="Cambria, serif"><FONT SIZE=4><B>----Head First Pattern</B></FONT></FONT><FONT FACE="宋体, SimSun"><FONT SIZE=4><B>之适配器模?/B></FONT></FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">很多人都有移动硬盘,它比</FONT>U<FONT FACE="宋体, SimSun">盘容量大的多Q体U也,携带方便Q用来拷资料、备份都很不错。ƈ且硬盘hD来越便宜Q?/FONT>120G<FONT FACE="宋体, SimSun">的移动硬盘现在才</FONT>300<FONT FACE="宋体, SimSun">多?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><BR> </P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">其实Ud盘里面是一块普通的W记本硬盘,q有一?/FONT>IDE<FONT FACE="宋体, SimSun">口(?/FONT>SATA<FONT FACE="宋体, SimSun">口,看硬盘的cd了,现在一般都?/FONT>SATA<FONT FACE="宋体, SimSun">口即串口Q?/FONT>IDE<FONT FACE="宋体, SimSun">口就是ƈ口)?/FONT>USB<FONT FACE="宋体, SimSun">口的转换卡,?/FONT>USB<FONT FACE="宋体, SimSun">U和电脑上的</FONT>USB<FONT FACE="宋体, SimSun">口连接v来就行了?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><BR> </P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">我手头有一?/FONT>40G<FONT FACE="宋体, SimSun">?/FONT>IDE<FONT FACE="宋体, SimSun">口笔记本盘Q想?/FONT>PC<FONT FACE="宋体, SimSun">电脑上用Q但又不x电脑拆开插主板的</FONT>IDE<FONT FACE="宋体, SimSun">U上。看到电脑上q有很多I闲?/FONT>USB<FONT FACE="宋体, SimSun">口,想能不能让W记本硬盘的</FONT>IDE<FONT FACE="宋体, SimSun">口连到电脑的</FONT>USB<FONT FACE="宋体, SimSun">口?直接q肯定不行,接口不匹配啊。就ȝ子市场逛了一个下午,发现有一U{接卡Q一头可以插</FONT>IDE<FONT FACE="宋体, SimSun">口,一头是</FONT>USB<FONT FACE="宋体, SimSun">口,能连</FONT>USB<FONT FACE="宋体, SimSun">U,</FONT>USB<FONT FACE="宋体, SimSun">U就可以q电脑的</FONT>USB<FONT FACE="宋体, SimSun">口了。我C转接卡回到家Q把转接卡一头插在笔记本盘?/FONT>IDE<FONT FACE="宋体, SimSun">口上Q另一头连?/FONT>USB<FONT FACE="宋体, SimSun">U,再把</FONT>USB<FONT FACE="宋体, SimSun">U连到电脑的</FONT>USB<FONT FACE="宋体, SimSun">口上。大功告成,现在我的W记本硬盘就变成Ud盘了。{接卡是q接</FONT>IDE<FONT FACE="宋体, SimSun">口和</FONT>USB<FONT FACE="宋体, SimSun">口的适配器。这是适配器模式?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">下面看适配器的</FONT>UML<FONT FACE="宋体, SimSun">cdQ?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><IMG src="http://docs.google.com/File?id=ah897shxqwtx_171hqrbh8fv_b" NAME="graphics1" ALIGN=BOTTOM WIDTH=359 HEIGHT=147 BORDER=0></P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">q个cd有点问题Q其?/FONT>Adaptee<FONT FACE="宋体, SimSun">应该是一个接口,q有个实现这个接口的</FONT>ConcreteAdaptee<FONT FACE="宋体, SimSun">Q?/FONT>Adapter<FONT FACE="宋体, SimSun">是目标接口,</FONT>ConcreteAdapter<FONT FACE="宋体, SimSun">必须实现</FONT>Adapter<FONT FACE="宋体, SimSun">Q持有一?/FONT>Adaptee<FONT FACE="宋体, SimSun">。移动硬盘和适配器模式对应关pd下:</FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in">Adapter<FONT FACE="宋体, SimSun">Q?</FONT>USB<FONT FACE="宋体, SimSun">接口</FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in">Adaptee<FONT FACE="宋体, SimSun">Q笔记本盘?/FONT>IDE<FONT FACE="宋体, SimSun">接口</FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in">ConcreteAdapter<FONT FACE="宋体, SimSun">Q{接卡</FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><BR> </P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">总而言之,适配器模式就是把一个接?/FONT>Adaptee<FONT FACE="宋体, SimSun">Q适配成目标接?/FONT>Adapter<FONT FACE="宋体, SimSun">?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in"><BR> </P> <P CLASS="western" STYLE="margin-bottom: 0in"><FONT FACE="宋体, SimSun">某些时候适配器和装饰模式有点相同之处Q但是两者本质是不一L?/FONT></P> <P CLASS="western" STYLE="margin-bottom: 0in">Adapter<FONT FACE="宋体, SimSun">是把所包装的接口,转换为另一个接口。?/FONT>Decorator<FONT FACE="宋体, SimSun">是给所包装的接口,d新的行ؓ或方法?/FONT></P> <br><img src ="http://www.tkk7.com/menlong999/aggbug/229011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-15 17:53 <a href="http://www.tkk7.com/menlong999/archive/2008/09/15/229011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Head First Pattern之单例模?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/14/228893.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Sun, 14 Sep 2008 07:40:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/14/228893.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/228893.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/14/228893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/228893.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/228893.html</trackback:ping><description><![CDATA[<h1>多线E环境下的单例模式实?/h1><h2 style="text-align: right;">----Head First Pattern之单例模?/h2><br><div><br>单例模式我想大家都比较熟悉,是在JVMq行期间一个类只有一个实例,M时候都是取得同一个实例,也就是一个全局变量了?br>单例模式分懒汉式和饿汉式Q但是懒汉式的单例在多线E环境下会有同步的问题,下面详细介绍了用3中方法来解决此问题?br>单例模式h以下几个特点Q?br>1.JVMq行期间有且只有一个实?br>2.构造函数是U有?br>3.通过一个静态工厂方法来获得唯一的实?br>4.累内部有一个私有静态实例,通过静态工厂方法创建后Q每ơ再调用静态工厂方法,q回的都是同一个实?br><br>饿汉式:<br>public class Singleton{<br>    private static Singleton uniqueInstance = new Singleton();<br>    // 其他实例变量<br>    private Singleton(){}<br>    public static Singleton getInstance(){<br>        return uniqueInstance;<br>    }<br>    <br>    // 其他Ҏ<br>}<br><br>懒汉式:<br>public class Singleton{<br>     private static Singleton uniqueInstance;<br>     // 其他实例变量<br>     private Singleton(){}<br>     public static Singleton getInstance(){<br>         if(uniqueInstance == null){<br>             uniqueInstance = new Signleton();<br>         }<br>         return uniqueInstance;<br>     }<br>     <br>     // 其他Ҏ<br> }<br><br>多线E环境下的单例模式:<br>上面的代码就是最基本的单例模式示例代码。但是懒汉式单例有一个问题,因ؓ要保证有且仅有一个实例,如果在多U程环境下调用Singleton.getInstance()Q就可能会有多个实例Qؓ了解军_U程讉K的问题,?U解x法供选择Q?br><br><b>1.静态工厂方法加同步关键字,q种Ҏ是在Ҏ能要求不高的情况下采用?/b><br>public class Singleton{<br>     private static Singleton uniqueInstance;<br>     // 其他实例变量<br>     private Singleton(){}<br>     public static <b style="color: rgb(255, 0, 0);">synchronised</b> Singleton getInstance(){<br>         if(uniqueInstance == null){<br>             uniqueInstance = new Signleton();<br>         }<br>         return uniqueInstance;<br>     }<br>     <br>     // 其他Ҏ<br> }<br><br><b>2.始终用饿汉式单例</b><br>public class Singleton{<br>     private static Singleton uniqueInstance = new Singleton();<br>     // 其他实例变量<br>     private Singleton(){}<br>     public static Singleton getInstance(){<br>         return uniqueInstance;<br>     }<br>     <br>     // 其他Ҏ<br> }<br>饿汉式的ҎQ会依赖于JVM在加载类的时候,创建唯一的实例。在每个U程讉KgetInstanceҎ前,唯一实例已经被创建?br><br><b>3.用双查锁来减懒汉式中静态方法getInstance的同步开销</b><br>对public static synchronised Singleton getInstance()的每ơ调用,都需要同步,而双查锁的方式只是在W一ơ创建实例时同步Q其他时候ƈ不需要同步?br>public class Singleton{<br>    private <b>volatile </b>static Singleton uniqueInstance;<br>    private Singleton(){}<br>    public static Singleton getInstance(){<br>        if(uniqueInstance == null){<br>            <b>synchronised(Singleton.class){<br>                if(uniqueInstance == null){<br>                       uniqueInstance = new Singleton();<br>                }<br>            }</b><br>        }<br>        return uniqueInstance;<br>    }<br>}<br><br>如果调用时实例ؓnullQ则q入同步区块Q此时再q行判断Q如果还为nullQ就创徏唯一的实例。有可能在一个线E在 if(uniqueInstance == null) 后进入同步区块前Q另一个线E恰好已l创建成功ƈ从同步区块中出来Q这需要进入同步区块后Q再做uniqueInstance是否为null的判断?br>同时uniqueInstance需要加volatile关键字,保证在创建单例实例时Q多个线E能正确处理uniqueInstance变量?br><br><b>注意Q?/b><br>双检查锁的方式在Java1.4?.4以前版本不能工作Q!因此双检查锁只能在Java 5及以上版本才可以使用?br>记得Effictive Java中也提到q双查锁Q也说不能在Java1.4中用?br>原因是Java 1.4及以前的JVM中对volatile关键字的实现允许对双查锁不合适的同步。(谁能帮我再深入解释下Q)原文是:<br>Unfortunately, in Java version 1.4 and earlier, many JVMs contain implementations of the volatile keyword that allow improper synchronization for double-checked locking. If you must use a JVM other than Java 5, consider other methods of implementing your Singleton.<br><br></div><br><img src ="http://www.tkk7.com/menlong999/aggbug/228893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-14 15:40 <a href="http://www.tkk7.com/menlong999/archive/2008/09/14/228893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新博开?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/14/228816.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Sat, 13 Sep 2008 16:06:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/14/228816.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/228816.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/14/228816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/228816.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/228816.html</trackback:ping><description><![CDATA[ <h1>新博开?/h1><br>最早用的是bloggerQ不q一直被。。偶解几天又被封。现在托奥运的福Q已l解了。但愿以后不要再被封。可恶的GFW。。。?br><br>后来用csdnQh够多Q但是也够烂。一直也没坚持写多少东西Q都是决心下了,是懒的动手写,q且发现写东西的时候,老是前言不对后尾Q前面说什么还没说完,后来开始跑题,q有Q写作水q_像越来越差,L觉一句话写的不明不白Q甚臌有点啰嗦?br><br>始终觉得cnblogq行Q界面够单,也够丑的了。。几乎都是技术的。^时也有订阅。今天终于搬来,竟然q需要h工审核,没想到?br><br>不过写博Q毕竟是Z让h看,如果有很多评论,或者很多h订阅rssQ肯定非帔R常有成就感!Q?br>被h捧也好,被h骂也好,被h褒扬也好Q被人拍砖也好,只要有h来看Q就是好Q!<br><br>以后有空q是多写写的好?br><img src ="http://www.tkk7.com/menlong999/aggbug/228816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-14 00:06 <a href="http://www.tkk7.com/menlong999/archive/2008/09/14/228816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Head First Pattern之代理模?/title><link>http://www.tkk7.com/menlong999/archive/2008/09/13/228810.html</link><dc:creator>Lv Yuanfang</dc:creator><author>Lv Yuanfang</author><pubDate>Sat, 13 Sep 2008 15:48:00 GMT</pubDate><guid>http://www.tkk7.com/menlong999/archive/2008/09/13/228810.html</guid><wfw:comment>http://www.tkk7.com/menlong999/comments/228810.html</wfw:comment><comments>http://www.tkk7.com/menlong999/archive/2008/09/13/228810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/menlong999/comments/commentRss/228810.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/menlong999/services/trackbacks/228810.html</trackback:ping><description><![CDATA[<h1><a name="Head_First_Pattern_93247998226_08606009744107723" id="Head_First_Pattern_93247998226_08606009744107723"></a>Head First Pattern之代理模?br></h1><div id="6iq2yy4" class="writely-toc" id="WritelyTableOfContents" toctype="decimal+disc"><ol class="writely-toc-decimal"><li><a target="_self" href="#Head_First_Pattern_93247998226_08606009744107723">Head First Pattern之代理模?/a><ol style="margin-left:0" class="writely-toc-subheading writely-toc-disc"><li><a target="_self" href="#_40936482697725296_39685097988">q程代理</a></li><li><a target="_self" href="#_3253479525446892_565335180610_5202975915744901">虚拟代理</a></li><li><a target="_self" href="#JDK_23414514306932688_91246650_5588917890563607">JDK动态代?/a></li><li><a target="_self" href="#_Decorator_">和Decorator的比?/a></li></ol></li></ol></div><div><br></div><div>d买的Head First Pattern英文版,看了一点点Q看hq是比较吃力。。今q开始一点点的看Q慢慢的看进MQ真是好书啊Q一点点的从实际例子入手Q一步步的、@序渐q的说明每一个设计模式,真是_的深入浅出!以前也看q阎宏的《Java与模式》,l合中国的传l道家文化、儒家思想Q甚臌游记、红楼梦、女娲造h都用上了Q说的是也算够透彻了的Q但是L觉还是有些东西理解的不太深?/div><div>下面ȝ下这些天看的代理模式。?br></div><div><br></div><div>一句话概括代理模式Q就是用代理对象对真实对象的讉K控制Q代理对象和真实对象都实现同一个Subject接口?/div><div>cd表示如下Q?/div><div><div style="text-align: left; padding-top: 1em; padding-bottom: 1em; padding-right: 0px; padding-left: 0px" id="dtbd"><img src="http://docs.google.com/File?id=ah897shxqwtx_164ftv8svc2_b" style="width: 391px; height: 150px"></div><div style="text-align: left; padding-top: 1em; padding-bottom: 1em; padding-right: 0px; padding-left: 0px" id="dtbd">图截自http://refcardz.dzone.com/里的免费书:<a ><b>Design Patterns</b></a></div></div><div>个h理解Q代理模式在现实例子里,可以有非常多的变U,关键在于代理对象如何实现对真实对象的讉K控制。变化在于访问控制的方式。着重说明下书中?个例子,是3U代理模式的使用场合。?/div><div><br><h2><a name="_40936482697725296_39685097988" id="_40936482697725296_39685097988"></a>q程代理<br></h2><div>q程代理的例子是java中的RMI。真是够深入浅出的Q让我以前对RMI非常模糊的印象也渐渐清晰h。咱们一步步l细道来。?/div><div><br></div><div>W一步:定义q程接口</div><div><br></div><div>1.l承java.rmi.Remote接口</div><div>定义服务接口Q服务接口必ȝ承自Remote接口。Remote接口是一个标记接口,是q个接口Q没有Q何要实现的方法,仅仅是用来标识其实现cd有某U功能(个h理解Q,像Serializable接口Q仅仅表C实现这个接口的c能被序列化?/div><div>public interface MyRemote extends Remote {</div><div><br></div><div>2.服务接口中所有方法抛出RemoteException异常</div><div>RMI客户端的Ҏ调用其实是调用实现Remote接口的StubQ桩Q,桩的实现是基于网l和IO的(底层是socketQ,客户端在调用Ҏq程中,M错误都有可能发生Q所以必让客户端知道所发生的异常,q能捕捉?/div><div>import java.rmi.*;</div><div>public interface MyRemote extends Remote {</div><div>    public String sayHello() throws RemoteException;<br></div><div>}</div><div><br></div><div>3.保证q回值和参数必须是可序列化的</div><div>q程Ҏ的参数要通过|络传输Q因此必L可序列化的,q回g是同栗如果用原生cdQint、float{)、String、集合等Q就没问题,如果用自qcdQ必d现Serializable接口Q和Remote接口一P都是标记接口Q?/div><div><br></div><div>W二步:实现q程服务</div><div><br></div><div>1.实现q程接口</div><div>public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{</div><div>    public String sayHello(){<br></div><div>        return "Hello, I'm server.";<br></div><div>    }</div><div>}</div><div><br></div><div>2.l承UnicastRemoteObject </div><div>要想成ؓ一个远E服务对象,需要有q程的功能。最单的Ҏ是实现UnicastRemoteObjectҎ了?/div><div><br></div><div>3.声明一个无参数的构造函敎ͼ且抛出RemoteException</div><div>public MyRemoteImpl() throws RemoteException{}</div><div><br></div><div>4.用RMI registry注册服务</div><div>实现q程服务后,要布q程服务供客L使用。要实例化一个远E服务,攑օRMI注册表中。注册了服务实现对象后,RMI会把StubQ桩Q放入注册表Q让客户端用?/div><div>try{</div><div>    MyRemote service = new MyRemoteImpl();<br></div><div>    Naming.rebind("RemoteHello",service);<br></div><div>}catch(Exception e){</div><div>    // ...<br></div><div>}</div><div><br></div><div>W三步:生成Stub和SkeletonsQ桩和骨Ӟ</div><div><br></div><div>1.在远E实现类上运行rmicQ不是远E接口)</div><div>rmic MyRemoteImplQ类名,不带.classQ?/div><div>会生成桩和骨架代码:MyRemoteImpl_Stub.class、MyRemoteImpl_Skel.class</div><div>rmic是jdk bin目录下的工具</div><div><br></div><div>W四步:q行rmiregistry</div><div><br></div><div>1.rmiregistry</div><div>必须让rmiregistry能访问到你的服务相关c,要么把类攑օclasspathQ要么在classes目录下直接运行rmiregistry</div><div><br></div><div>W五步:启动服务</div><div><br></div><div>1.另一个dosH口里启动服务类</div><div>java MyRemoteImpl</div><div><br></div><div><br></div><div>客户端调用方法:</div><div>MyRemote service = (MyRemote)Naming.lookup("rmi://127.0.0.1/RemoteHello");</div><div>String msg = service.sayHello();// 调用桩的Ҏ<br></div><div><br></div><div><div style="margin-top: 0px; margin-bottom: 0px">通过RMI registry查找服务后,q回桩,客户端必ȝMyRemoteImpl_Stub.class和MyRemote.class。桩MyRemoteImpl_Stub.class、骨架MyRemoteImpl_Skel.class、MyRemote.class、MyRemoteImpl.class必须在服务端?/div><div><br></div></div><div><br></div><div>q么多ؕ七八p的跟代理模式有什么关p?</div><div>其实客户端返回的MyRemoteQ其实是MyRemote_StubQ就是代理对象了Q服务端的MyRemoteImpl及时实际对象Q通过RMIQ来获得q程对象的代理,再通过代理Q来讉K实际对象Q远E服务实现类MyRemoteImplQ所实现的远E服务方法(MyRemote定义Q。对应类图,每个cd代理模式中的角色分别是:</div><div>SubjectQMyRemote接口</div><div>RealObjectQMyRemoteImpl服务实现c?/div><div>ProxyQMyRemote_Stub?/div><div><br></div><div>在RMI中,扑ֈ服务后,拿到的MyRemote service其实是一个代理对象(MyRemote_StubQ,对代理对象的Ҏ调用Q实际是通过RMI来访问远E服务实现对象的Ҏ。也是说代理对象MyRemote serviceQ实际是MyRemote_StubQ通过RMI机制对远E服务对象来?b>讉K控制</b>Q也实C代理模式?/div><div></div><h2><a name="_3253479525446892_565335180610_5202975915744901" id="_3253479525446892_565335180610_5202975915744901"></a>虚拟代理<br></h2><p>虚拟代理丄是一个Swing的例子?/p><p>我是q么理解的:一个对象的创徏非常耗时Q通过代理对象去调用,在真实对象创建前Q返回一个假的调用,{真实对象创建好了,q时候返回给客户端的是一个真实对象的相应Ҏ调用?/p><p><br></p><p>也就是gq加载的问题QSwing例子中,要显CZ个IconQ但是要通过|络加蝲一个图片,在图片通过|络加蝲成功前,先显CZ个“加载中Q请E?..”(如果是真实对象的调用Q应该显CZ个图片)Q在代理对象中通过后台U程d载图片,加蝲完了后,再偷L把“加载中Q请E?..”的字样偷偷换成加蝲成功后的囄?/p><p><br></p><p>没想到这也算代理模式的一U应用场景。以前有q么在Swing中用q,需要从数据库中查找数据Q但是比较耗时Q就先显C“加载数据中Q请E?..”,{加载完了,再在JTable中显C出来。如果用代理模式的方式来思考,好像比较的好吧。?/p><p><br></p><p>同样在jsp面里,通过ajax来加载数据好像也是这L道理Q数据没加蝲之前是“加载中...”,加蝲完了再通过innerHTML来改变显C,也是同样的gq加载问题?/p><p>如果用代理模式的方式来考虑Q可以定义一个JavaScriptc(q个cd实是个代理)Q这个类有个Ҏ要显CZ些从Server取出的数据,但是调用昄ҎӞ后台数据q没有加载,先昄加蝲中请E候之cȝ文本Q这时候通过ajax从Server取数据(创徏真实对象Q,取出来之后在回调函数中更新显CHTML元素的innerHTML。跟那个Swing的例子一模一样吧。不q好像JavaScript中好像没有谁会定义接口、实现、代理对象吧Q但是思\其实是一L?/p><p>不知道这L解代理模式,不曲解。。?/p><p><br></p><h2><a name="JDK_23414514306932688_91246650_5588917890563607" id="JDK_23414514306932688_91246650_5588917890563607"></a>JDK动态代?br></h2><p>jdk里的动态代理支持,主要是通过java.lang.reflect包中Proxy、InvocationHandler{几个类来实现的。具体如何实现可参考JDK中文文?/p><p>使用场合Q?/p><p>好像在在一本Hibernate的书上,Ҏ据库Connection的closeҎ调用Q用动态代理的方式来拦截,q不真正关闭q接Q而是q回到数据库q接池中?/p><p>在Spring中的拦截貌似有些是用动态代理实现的Q不q动态代理用时要基于接口,但是Spring是用动态生成字节码的方式?对Spring内部实现机制不熟。。不敢妄自猜。。等有时间好好研I再来说明。?/p><div>动态代理,我觉得最好的使用场合是给Ҏ调用增加预处理和后处理,更加灉|了,可以做一些额外的事,同时也做到无侵入的解耦合Q因Z理对象和实际对象的接口是一LQ唯一需要注意的地方是,客户端调用者是拿的接口Q接口到底是使用代理对象q是实际对象Q调用者ƈ不知道,q就需要对代理对象的创建用cM工厂的方式来装创徏。比如一下代码:</div><div>PersonBean getOwnerProxy(PersonBean person){</div><div>    return (PersonBean)Proxy.newProxyInstance(<br></div><div>             person.getClass().getClassLoader(),<br></div><div>             person.getClass().getInterfaces(),<br></div><div>             new OwnerInvocationHandler(person));</div><div>}<br></div><div><br></div><div>PersonBean为Subject接口QOwnerInvocationHandler实现InvocationHandler接口?/div><div><br></div><h2><a name="_Decorator_" id="_Decorator_"></a>和Decorator的比?br></h2><div>Decorator模式在jdk的java.io包中使用非常q泛。主要用来ؓ一个类d新的行ؓ?/div><div>而Proxy模式中,代理对象q不对实际对象添加新的行为,只是对实际对象做讉K控制?/div></div><br><img src ="http://www.tkk7.com/menlong999/aggbug/228810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/menlong999/" target="_blank">Lv Yuanfang</a> 2008-09-13 23:48 <a href="http://www.tkk7.com/menlong999/archive/2008/09/13/228810.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://dsfv1.com" target="_blank">ɫۺϽѹۿ</a>| <a href="http://sanyoumiaomu.com" target="_blank">츾AV</a>| <a href="http://7a37.com" target="_blank">վѴȫպ </a>| <a href="http://www-13696.com" target="_blank">㽶Ʒþ</a>| <a href="http://bearsou.com" target="_blank">ŮAëƬ</a>| <a href="http://k5nn.com" target="_blank">޹Ů߹ۿ</a>| <a href="http://554ka.com" target="_blank">޾Ʒվ</a>| <a href="http://bjhuicui.com" target="_blank">avרۿƷ</a>| <a href="http://caoliusq1024.com" target="_blank">+ɫ++</a>| <a href="http://www3ratcom.com" target="_blank">һ245699</a>| <a href="http://3334598.com" target="_blank">ֱ߹ۿƵƵ</a>| <a href="http://yy6090qpgdy.com" target="_blank">Ļav</a>| <a href="http://5222133.com" target="_blank">ԴѸ߲</a>| <a href="http://www-13696.com" target="_blank">123</a>| <a href="http://ztxfkj.com" target="_blank">ƬƵۿ</a>| <a href="http://hezuoedu.com" target="_blank">ѿֻˬ͵Ƶ</a>| <a href="http://2023852.com" target="_blank">JLZZJLZZ</a>| <a href="http://www-bajie.com" target="_blank">aëƬȫ</a>| <a href="http://mqiuxia66.com" target="_blank">վ߹ۿ</a>| <a href="http://wwwby1385.com" target="_blank">vaƷѹۿ</a>| <a href="http://lshwork.com" target="_blank">JLZZJLZZٸ</a>| <a href="http://lkzrgy.com" target="_blank">þþ</a>| <a href="http://vvihh.com" target="_blank">˳ëƬ߲</a>| <a href="http://igo98.com" target="_blank">ڳ߿</a>| <a href="http://555yyyy.com" target="_blank">Ʒð׽Ƶ </a>| <a href="http://shlamore.com" target="_blank">޹ƷVA߹ۿ鶹 </a>| <a href="http://www321fafa.com" target="_blank">Ʒѹۿþ</a>| <a href="http://okgou58.com" target="_blank">þ޾Ʒ</a>| <a href="http://www-774220.com" target="_blank">޳aƬ߹ۿ</a>| <a href="http://nmgqsyg.com" target="_blank">99Ʒѹۿ</a>| <a href="http://6006769.com" target="_blank">޾Ʒ㶮</a>| <a href="http://jinluffcl.com" target="_blank">ۺϾþҹAV </a>| <a href="http://caobi97.com" target="_blank">91ѹƷ</a>| <a href="http://yuyang0752.com" target="_blank">avһվ²</a>| <a href="http://gayhh.com" target="_blank">vvվ</a>| <a href="http://liexion.com" target="_blank">69˳鶹Ƶ</a>| <a href="http://lh726.com" target="_blank">ؼavëƬѹۿ</a>| <a href="http://zdmaid.com" target="_blank">޾Ʒ</a>| <a href="http://jiajuco.com" target="_blank">ѹۿҹŷëƬ</a>| <a href="http://www-01313.com" target="_blank">99þùƷһ </a>| <a href="http://html5text.com" target="_blank">ɫվwww</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>