<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_幸运星空</title><subtitle type="text">Lucker的程序人生</subtitle><id>http://feed.cnblogs.com/blog/u/38860/rss</id><updated>2012-05-16T07:53:03Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/38860/rss"/><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/05/15/2501336.html</id><title type="text">《博览汇》——新浪微博Android客户端（051616）</title><summary type="text">应用简介： 当前版本号：1.0.2（3） 博览汇，是一款免费的新浪微博Android客户端应用。它体积小巧，功能实用，操作流畅，使用方便 ，且无广告，无后台，请放心使用。您可以通过《博览汇》查看“我的...</summary><published>2012-05-15T04:42:00Z</published><updated>2012-05-15T04:42:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/05/15/2501336.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/05/15/2501336.html"/><content type="html">&lt;p&gt;&lt;strong&gt;应用简介：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;当前版本号：1.0.2（3）&lt;/p&gt; &lt;p&gt;博览汇，是一款免费的新浪微博Android客户端应用。它体积小巧，功能实用，操作流畅，使用方便 ，且无广告，无后台，请放心使用。您可以通过《博览汇》查看&amp;#8220;我的微博&amp;#8221;、&amp;#8220;提到我的&amp;#8221;、&amp;#8220;我的评论&amp;#8221;等信息，还可以查看其他人的消息并进行&amp;#8220;关注&amp;#8221;等操作。在功能方面尽量做到&amp;#8220;应有尽有&amp;#8221;，同时保持清新整洁，没有多余的功能，满足绝大多数微博爱者的日常使用需要。&lt;/p&gt; &lt;p&gt;已针对GPRS，3G和WIFI等不同网络环境可以自动优化处理。对图片查看的速度进行了特别优化。&lt;/p&gt; &lt;p&gt;暂时只支持2.3及以上系统。建议分辨率800*480及以上。 &lt;/p&gt; &lt;p&gt;应用授权后，请先进入发表新微博窗口，打开表情界面，会自动从网络加载表情数据，以便正常显示表情符号，以后将不再需要联网加载。 &lt;/p&gt; &lt;p&gt;应用中包含很多实用的小技巧，等待您去发现哦。&lt;/p&gt;1.0.2（3）&amp;nbsp;更新说明：&amp;nbsp;&lt;br /&gt;&lt;p&gt;详阅界面长按微博空白处时，弹出快捷菜单，可以复制，回复和引用原文。&lt;/p&gt;&lt;p&gt;各界面标题栏样式带下拉箭头，以提示用户标题栏可点击下拉。&lt;/p&gt;&lt;p&gt;修正进入设置界面时重复提示关注作者的问题。&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.0.1（2）&amp;nbsp;更新说明：&amp;nbsp;&lt;/p&gt;&lt;p&gt;启动画面增加新浪微博小图标；&lt;/p&gt;&lt;p&gt;图片查看界面将旋转图片任务切换到后台线程，以防止界面假死现象；&lt;/p&gt;&lt;p&gt;详阅界面长按评论时，添加弹出菜单，可以回复或复制当前评论；&lt;/p&gt;&lt;p&gt;部分UI细节调整。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;下载链接：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;若有新的更新，将第一时间更新到这个地址。其它应用商店也会及时更新，但由于需要通过各自商店的审核，因此可能会比这里稍微晚一点。&lt;/p&gt; &lt;p&gt;猛击这里下载：&lt;a href="http://files.cnblogs.com/luckeryin/BoLanHui.apk"&gt;http://files.cnblogs.com/luckeryin/BoLanHui.apk&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;应用截图：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151240571232.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="weibo_icon_96" border="0" alt="weibo_icon_96" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151240587262.png" width="100" height="100" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151240597163.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120515120224" border="0" alt="PrtScn20120515120224" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241011882.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241051486.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513201210" border="0" alt="PrtScn20120513201210" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241114729.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241152414.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120512215029" border="0" alt="PrtScn20120512215029" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241164824.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241167789.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004518" border="0" alt="PrtScn20120513004518" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241172707.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/20120515124118132.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004743" border="0" alt="PrtScn20120513004743" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241195050.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241212834.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004613" border="0" alt="PrtScn20120513004613" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241234064.jpg" width="324" height="484" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/20120515124125420.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004352" border="0" alt="PrtScn20120513004352" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241309891.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241398967.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004418" border="0" alt="PrtScn20120513004418" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241432507.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241536401.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004638" border="0" alt="PrtScn20120513004638" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151241586953.jpg" width="324" height="484" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151242058767.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151242132859.png" width="324" height="484" /&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151242145825.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120513004357" border="0" alt="PrtScn20120513004357" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/20120515124216959.jpg" width="324" height="484" /&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151242223887.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PrtScn20120512215146" border="0" alt="PrtScn20120512215146" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201205/201205151242255193.jpg" width="324" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2501336.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/05/15/2501336.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/28/2421274.html</id><title type="text">在C#中调用Java生成的jar库文件的方法</title><summary type="text">一、将已经编译后的java中Class文件进行打包；打包命令JAR如：将某目录下的所有class文件夹全部进行打包处理；使用的命令：jar cvf test.jar -C com/ .其中test.jar为要生成的jar包；com/ . 为指定的当前目录下的文件夹，该文件夹包括子文件夹及class文件；二、到IKVM官方网站下载IKVM需要的组件 http://www.ikvm.net/ ikvm-0.42.0.3.zip ikvmbin-0.42.0.3.zip openjdk6-b16-stripped.zip三、设置路径解压ikvm-0.42.0.3.zip,并将%IKVM_HOM...</summary><published>2012-03-28T06:49:00Z</published><updated>2012-03-28T06:49:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/28/2421274.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/28/2421274.html"/><content type="html">&lt;div&gt;&lt;div&gt;一、将已经编译后的java中Class文件进行打包；打包命令JAR&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;如：将某目录下的所有class文件夹全部进行打包处理；&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;使用的命令：jar cvf test.jar -C com/ .&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;其中test.jar为要生成的jar包；com/ . 为指定的当前目录下的文件夹，该文件夹包括子文件夹及class文件；&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;二、到IKVM官方网站下载IKVM需要的组件 &amp;nbsp;http://www.ikvm.net/&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ikvm-0.42.0.3.zip&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ikvmbin-0.42.0.3.zip&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;openjdk6-b16-stripped.zip&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;三、设置路径&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;解压ikvm-0.42.0.3.zip,并将%IKVM_HOME%/bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;四、将java的jar包转换为.dll控件&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;使用的命令：ikvmc -out:IKVM.dll test.jar&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;其中IKVM.dll为将要生成的.dll控件文件名；test.jar为之前打包好的jar包文件。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;五、在C#项目中添加所需的控件&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 1、新建一个C#.NET项目，首先添加一下必须的DLLs&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;%IKVM_HOME%/bin/IKVM.OpenJDK.Core.dll&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;%IKVM_HOME%/bin/IKVM.Runtime.dll&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;%IKVM_HOME%/bin/IKVM.Runtime.JNI.dll&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; 2、添加已生成的.dll文件&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 将之前生成好的.dll文件加载到C#项目中&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;六、测试&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;在C#项目中使用java类，其方法同java。但对包的引用使用C#的语法using&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;源代码：&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Java源代码：&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;package&lt;/span&gt;&amp;nbsp;com.zht;&lt;br /&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;要调用的Java类&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&amp;nbsp;Test&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;要调用的Java方法&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;String&amp;nbsp;returnString()&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;"Hello,&amp;nbsp;zht!";&lt;br /&gt;&lt;span style="color: #008080;"&gt;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;8&lt;/span&gt;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;C#窗体源代码：&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.ComponentModel;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Data;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Drawing;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;System.Windows.Forms;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;com.zht;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;namespace&lt;/span&gt;&amp;nbsp;KIVMTest&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;partial&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&amp;nbsp;Form1&amp;nbsp;:&amp;nbsp;Form&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;Form1()&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;Form1_Load(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test&amp;nbsp;t&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;Test();&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;str&amp;nbsp;=&amp;nbsp;t.returnString();&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(str);&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2421274.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/28/2421274.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413788.html</id><title type="text">C#23种设计模式WebCast讲解笔记大全（25讲）</title><summary type="text">C#面向对象设计模式第一讲：面向对象设计模式与原则 C#面向对象设计模式第二讲：Singleton Pattern单件模式（创建型模式） C#面向对象设计模式第三讲：Abstract Factory...</summary><published>2012-03-23T07:48:00Z</published><updated>2012-03-23T07:48:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413788.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413788.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/16/2290467.html"&gt;C#面向对象设计模式第一讲：面向对象设计模式与原则&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/16/2290470.html"&gt;C#面向对象设计模式第二讲：Singleton Pattern单件模式（创建型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/16/2290479.html"&gt;C#面向对象设计模式第三讲：Abstract Factory Pattern 抽象工厂模式（创建型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/16/2290488.html"&gt;C#面向对象设计模式第四讲：Builder Pattern生成器模式（创建型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/19/2293653.html"&gt;C#面向对象设计模式第五讲：Factory Method 工厂方法（创建型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/19/2293527.html"&gt;C#面向对象设计模式第六讲：Prototype 原型模式（创建型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/23/2299864.html"&gt;C#面向对象设计模式第七讲：Adapter Pattern 适配器模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/23/2299872.html"&gt;C#面向对象设计模式第八讲：Bridge 桥接模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/26/2302188.html"&gt;C#面向对象设计模式第九讲：Composite 组合模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/26/2302387.html"&gt;C#面向对象设计模式第十讲：Decorator 装饰模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/27/2303828.html"&gt;C#面向对象设计模式第十一讲：Facade 外观模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/29/2306349.html"&gt;C#面向对象设计模式第十二讲：Flyweight 享元模式（结构型模式）&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2011/12/29/2306485.html"&gt;C#面向对象设计模式第十三讲：Proxy 代理模式（结构型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/01/10/2318305.html"&gt;C#面向对象模式设计第十四讲：Template Method 模板模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/01/10/2318410.html"&gt;C#面向对象模式设计第十五讲：Command 命令模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/01/11/2319771.html"&gt;C#面向对象模式设计第十六讲：Interpreter 解释器模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/01/13/2321903.html"&gt;C#面向对象模式设计第十七讲：Mediator 中介者模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/01/2375864.html"&gt;C#面向对象模式设计第十八讲：Iterator 迭代器模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/02/2377368.html"&gt;C#面向对象模式设计第十九讲：Observer 观察者模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410190.html"&gt;C#面向对象模式设计第二十讲：Chain Responsibility 职责链模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410297.html"&gt;C#面向对象模式设计第二十一讲：Memento 备忘录模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/22/2411953.html"&gt;C#面向对象模式设计第二十二讲：State 状态模式（行为型模式）&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413419.html"&gt;C#面向对象模式设计第二十三讲：Startegy 策略模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413690.html"&gt;C#面向对象模式设计第二十四讲：Visitor 观察者模式（行为型模式）&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413766.html"&gt;C#面向对象模式设计第二十五讲（最后一进）：设计模式总结&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2413788.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413788.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413766.html</id><title type="text">C#面向对象模式设计第二十五讲（最后一讲）：设计模式总结</title><summary type="text">1、创建型模式： Singleton：解决的是实例化对象的个数的问题，比如抽象工厂中的工厂、对象池等，除了Singleton之外，其他创建型模式解决的都是 new 所带来的耦合关系。 Abstract...</summary><published>2012-03-23T07:37:00Z</published><updated>2012-03-23T07:37:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413766.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413766.html"/><content type="html">&lt;p&gt;1、创建型模式： &lt;/p&gt;&lt;p&gt;Singleton：解决的是实例化对象的个数的问题，比如抽象工厂中的工厂、对象池等，除了Singleton之外，其他创建型模式解决的都是 new 所带来的耦合关系。 &lt;/p&gt;&lt;p&gt;Abstract Factory：创建一系列相互依赖对象，并能在运行时改变系列。 &lt;/p&gt;&lt;p&gt;Factory Method：创建单个对象，在Abstract Factory有使用到。 &lt;/p&gt;&lt;p&gt;Prototype：通过拷贝原型来创建新的对象。 &lt;/p&gt;&lt;p&gt;Factory Method，Abstract Factory, Builder都需要一个额外的工厂类来负责实例化&amp;#8220;一边对象&amp;#8221;，而Prototype则是通过原型（一个特殊的工厂类）来克隆&amp;#8220;易变对象&amp;#8221;。 &lt;/p&gt;&lt;p&gt;如果遇到&amp;#8220;易变类&amp;#8221;，起初的设计通常从Factory Method开始，当遇到更多的复杂变化时，再考虑重构为其他三种工厂模式（Factory Method，Abstract Factory, Builder）。 &lt;/p&gt;&lt;p&gt;2、结构性模式 &lt;/p&gt;&lt;p&gt;Adapter：注重转换接口，将不吻合的接口适配对象，用于旧代码复用、类库迁移等。 &lt;/p&gt;&lt;p&gt;Bridge：注重实现抽象和实现的分离，支持对象多维度的变化。 &lt;/p&gt;&lt;p&gt;Composite：注重统一接口，将&amp;#8220;一对多&amp;#8221;的关系转化为&amp;#8220;一对一&amp;#8221;的关系，屏蔽对象容器内部实现结构，实现对象和对象容器使用的一致性。 &lt;/p&gt;&lt;p&gt;Decorator：注重稳定接口，在此前提下为对象扩展功能，实现对象功能的扩展，避免子类膨胀。 &lt;/p&gt;&lt;p&gt;Facade：注重简化接口，屏蔽各子系统的复杂性，提供更高层接口供客户访问。 &lt;/p&gt;&lt;p&gt;Flyweight：注重保留接口，在内部使用共享技术对对象存储进行优化（通过共享大量细粒度对象，提供系统性能）。 &lt;/p&gt;&lt;p&gt;Proxy：注重假借接口，通过增加间接代理，实现更多控制，屏蔽复杂性。 &lt;/p&gt;&lt;p&gt;3 、行为型模式 &lt;/p&gt;&lt;p&gt;Template Method：封装算法结构，定义算法骨架，支持算法子步骤变化。 &lt;/p&gt;&lt;p&gt;Strategy：注重封装算法，支持算法的变化，通过封装一系列算法，从而可以随时独立于客户替换算法。 &lt;/p&gt;&lt;p&gt;State：注重封装与状态相关的行为，支持状态的变化，通过封装对象状态，从而在其内部状态改变时改变它的行为。 &lt;/p&gt;&lt;p&gt;Memento：注重封装对象状态变化，支持状态保存、恢复。 &lt;/p&gt;&lt;p&gt;Mediator：注重封装对象间的交互，通过封装一系列对象之间的复杂交互，使他们不需要显式相互引用，实现解耦。 &lt;/p&gt;&lt;p&gt;Chain of Responsibility：注重封装对象责任，支持责任的变化，通过动态构建职责链，实现事务处理。 &lt;/p&gt;&lt;p&gt;Command：注重将请求封装为对象，支持请求的变化，通过将一组行为抽象为对象，实现行为请求者和行为实现者之间的解耦。 &lt;/p&gt;&lt;p&gt;Iterator：注重封装特定领域变化，支持集合的变化，屏蔽集合对象内部复杂结构，提供客户程序对它的透明遍历。 &lt;/p&gt;&lt;p&gt;Interpreter：注重封装特定领域变化，支持领域问题的频繁变化，将特定领域的问题表达为某种语法规则下的句子，然后构建一个解释器来解释这样的句子，从而达到解决问题的目的。 &lt;/p&gt;&lt;p&gt;Observer：注重封装对象通知，支持通信对象的变化，实现对象状态改变，通知依赖它的对象并更新。 &lt;/p&gt;&lt;p&gt;Visitor：注重封装对象操作变化，支持在运行时为类结构添加新的操作，在类层次结构中，在不改变各类的前提下定义作用于这些类实例的新的操作。 &lt;/p&gt;&lt;p&gt;正确对待模式： &lt;/p&gt;&lt;p&gt;设计模式建立在对系统变化点的基础上进行，哪里有变化，哪里就应用设计模式。 &lt;/p&gt;&lt;p&gt;设计模式应该以演化的方式来获得，系统的变化点往往是经过不断演化才能准确定位。 &lt;/p&gt;&lt;p&gt;不能为了模式而模式，设计模式是一种软件设计的软力量，而非规范标准，不应夸大设计模式的作用。 &lt;/p&gt;&lt;p&gt;《完》&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2413766.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413766.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413690.html</id><title type="text">C#面向对象模式设计第二十四讲：Visitor 观察者模式（行为型模式）</title><summary type="text">（根据MSDN WebCast相关课程整理） 类层次结构中可能经常由于引入新的操作（虚方法），从而将类型变得脆弱。 如下图是一幅类继承关系的层次结构图， 如果在父类中直接增加一个虚方法时，所有的子类...</summary><published>2012-03-23T07:01:00Z</published><updated>2012-03-23T07:01:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413690.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413690.html"/><content type="html">&lt;p&gt;（根据MSDN WebCast相关课程整理）&lt;/p&gt; &lt;p&gt;类层次结构中可能经常由于引入新的操作（虚方法），从而将类型变得脆弱。 &lt;p&gt;如下图是一幅类继承关系的层次结构图， &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500168866.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500191983.jpg" width="620" height="470"&gt;&lt;/a&gt; &lt;p&gt;如果在父类中直接增加一个虚方法时，所有的子类都可能需要改变。如何在不改变类层次与结构的前提下，在运行为根据需要透明的为各个类添加新的方法与操作。 &lt;p&gt;GoF：表示一个作用于某种对象结构中的各元素的操作。它可以不改变各元素的类的前提下，定义作用于这些元素的新的操作。 &lt;p&gt;&lt;b&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500219243.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500235632.jpg" width="617" height="373"&gt;&lt;/a&gt;&lt;/b&gt; &lt;p&gt;没有采用Visitor模式时： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500309889.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500476503.jpg" width="470" height="139"&gt;&lt;/a&gt; &lt;p&gt;应用Visitor模式，需要在父类中事先准备好一个方法，以便接收事后添加的新操作，并提供一个Visitor类，这个类中包括父类的所有子类的相应操作。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500558709.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231500587997.jpg" width="682" height="207"&gt;&lt;/a&gt; &lt;p&gt;在父类的各子类中，实现事先准备好的方法，如下： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501012226.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/2012032315010343.jpg" width="560" height="257"&gt;&lt;/a&gt; &lt;p&gt;前是预先准备好的父类及其子类应该具体的条件，以下开始自己添加新的操作。 &lt;p&gt;在MyVisitor中具体实现要添加的操作： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501058765.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501067487.jpg" width="466" height="191"&gt;&lt;/a&gt; &lt;p&gt;将新添加的操作和父类关联： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501085337.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501108171.jpg" width="531" height="192"&gt;&lt;/a&gt; &lt;p&gt;具体调用的方式与步骤： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501153149.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231501203243.jpg" width="539" height="240"&gt;&lt;/a&gt; &lt;p&gt;C#中的扩展方法功能就是Visitor模式的典型应用。 &lt;p&gt;&lt;/p&gt;&amp;lt;完&amp;gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2413690.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413690.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413419.html</id><title type="text">C#面向对象模式设计第二十三讲：Startegy 策略模式（行为型模式）</title><summary type="text">（根据MSDN WebCast相关课程整理） 这是一种应用非常广泛的行为型设计模式。 对象可能经常需要用多种不同的算法，但是如果变化频繁，会将类型变得很脆弱。 如上图所示，对...</summary><published>2012-03-23T04:05:00Z</published><updated>2012-03-23T04:05:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413419.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413419.html"/><content type="html">&lt;p&gt;（根据MSDN WebCast相关课程整理）&lt;/p&gt; &lt;p&gt;这是一种应用非常广泛的行为型设计模式。 &lt;/p&gt;&lt;p&gt;对象可能经常需要用多种不同的算法，但是如果变化频繁，会将类型变得很脆弱。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204112321.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204181594.jpg" width="327" height="197" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;如上图所示，对于一个立方休，取不同的截面，那么它的面积计算方法就会不同，需要采用不同的算法。 &lt;/p&gt;&lt;p&gt;那么，如何在运行时，不更改方法而动态的设计算法呢？将算法与对象解耦，实现动态加载。 &lt;/p&gt;&lt;p&gt;C#中动态可加载以支持运行时变化的技术手段有： &lt;/p&gt;&lt;p&gt;虚函数，接口，委托，反射 &lt;/p&gt;&lt;p&gt;GoF：定义一系列算法，把它们一个个封装起来，并且使它们可互相替换，该模式使得算法可以独立于使用它的客户系统的变化。 &lt;/p&gt;&lt;p&gt;一个没有采用策略模式的示例: &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204251641.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204327633.jpg" width="414" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204398203.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/20120323120449211.jpg" width="489" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;采用策略模式后,实现了算法策略与具体对象的分离，这样在同一个对象中，传入不同的策略对象，就可以实现不同的算法，从而达到动态改变算法的目的。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204553238.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203231204599188.jpg" width="567" height="328" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;lt;完&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2413419.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/23/2413419.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/22/2411953.html</id><title type="text">C#面向对象模式设计第二十二讲：State 状态模式（行为型模式）</title><summary type="text">（根据MSDN WebCast相关课程整理） 对象拥有不同的状态，往往会行使不同的行为。如图： 通常，我们可以采用switch…case语句来解决问题，但是，如果这种状态变化比较频繁...</summary><published>2012-03-22T09:21:00Z</published><updated>2012-03-22T09:21:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/22/2411953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/22/2411953.html"/><content type="html">&lt;p&gt;（根据MSDN WebCast相关课程整理）&lt;/p&gt; &lt;p&gt;对象拥有不同的状态，往往会行使不同的行为。如图：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720353595.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720378904.jpg" width="316" height="222" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;通常，我们可以采用switch&amp;#8230;case语句来解决问题，但是，如果这种状态变化比较频繁，那么，这必须导致对象与对象之间的紧耦合。当然，我们不要为使用设计模式而刻意的采用设计模式，因为一些简  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720397626.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720433750.jpg" width="456" height="195" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;单案例下，采用模式可能反而会使设计更加复杂化。我们建议的项目初期不要刻意的应用模式，而是根据需要，找到变化点，渐进的重构出设计模式。  &lt;/p&gt;&lt;p&gt;没有采用设计模式时的情况:  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720459997.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720472864.jpg" width="406" height="274" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;当文档增加一种新的状态，如Printing时，由于紧耦合的存在，将需要同时破坏原枚举类型和Document类两个对象。  &lt;/p&gt;&lt;p&gt;采用State模式的情况：  &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720538856.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203221720569332.jpg" width="616" height="363" /&gt;&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;在这种模式下，我们只需要增加一个继承自StatedDocument的PrintingDocument类，在调用时给Document对象在statedDocument属性赋值就可以啦。同时，我们还可以在StatedDocument类中预计定义到状态的切换。  &lt;/p&gt;&lt;p&gt;&amp;lt;完&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2411953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/22/2411953.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410297.html</id><title type="text">C#面向对象模式设计第二十一讲：Memento 备忘录模式（行为型模式）</title><summary type="text">（根据MSDN WebCast相关课程整理） 对象状态变化无端，如何回溯或恢复这些对象在某个点的状态呢？ GoF:在不破坏对象封装性的前提下，捕获一个对象的内部状态，并在该对象外保存这个状态...</summary><published>2012-03-21T09:48:00Z</published><updated>2012-03-21T09:48:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410297.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410297.html"/><content type="html">&lt;p&gt;（根据MSDN WebCast相关课程整理）&lt;/p&gt; &lt;p&gt;对象状态变化无端，如何回溯或恢复这些对象在某个点的状态呢？ &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211746447940.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211746522164.jpg" width="321" height="237" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;GoF:在不破坏对象封装性的前提下，捕获一个对象的内部状态，并在该对象外保存这个状态，这样以后就可以将这个对象恢复到之前的状态。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211746567275.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211746584502.jpg" width="328" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;将对象的状态保存到了外部的Memento对象中，而在原发器对象内容提供保存状态和恢复状态的操作。而备忘录对象则只负责保存对象的状态，不支持原发器对象的所有操作。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747083969.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747398814.jpg" width="584" height="326" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747409239.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747455613.jpg" width="584" height="92" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747501562.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211747578851.jpg" width="594" height="276" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;也可以使用克隆对象或序列化来保存对象的状态，我们可以根据实际情况和需要来选择。 &lt;/p&gt;&lt;p&gt;《完》&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2410297.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410297.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410190.html</id><title type="text">C#面向对象模式设计第二十讲：Chain Responsibility 职责链模式（行为型模式）</title><summary type="text">（根据MSDN WebCast相关课程整理） 在一些情况下，请求的接收者可能多种多样，变化无常，如下图所示： 请求的发送者需要维护多个耦合，以处理请求信息的传达。这就存在多个强耦合。 GoF...</summary><published>2012-03-21T08:53:00Z</published><updated>2012-03-21T08:53:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410190.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410190.html"/><content type="html">&lt;p&gt;（根据MSDN WebCast相关课程整理）&lt;/p&gt; &lt;p&gt;在一些情况下，请求的接收者可能多种多样，变化无常，如下图所示： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211652515082.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/20120321165253249.jpg" width="494" height="191" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;请求的发送者需要维护多个耦合，以处理请求信息的传达。这就存在多个强耦合。 &lt;/p&gt;&lt;p&gt;GoF：使多个对象都有机会处理请求，从而避免请求的发送者和接收者的耦合关系，将这些对象连成一条链，并沿着这条链传递请求，直到有一个对象处理了它为止。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211652553050.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211652569853.jpg" width="336" height="248" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;由多个Handler的子类共同构成一个单向链表的数据结构，Next指针指向它的后继元素。当Handler不能处理所传递的请求时，就将这个请求传递到下一个Handler对象，直到最后一个。其中的Next属性用于维护传递的链条。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653012422.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/20120321165303796.jpg" width="508" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653042026.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653077269.jpg" width="528" height="242" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653137264.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653155887.jpg" width="432" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653214387.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/luckeryin/201203/201203211653231681.jpg" width="468" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可以通过Handler的Next属性在运行时动态的修改链条的传递次序： &lt;/p&gt;&lt;p&gt;Handler2.Next=handler3; &lt;/p&gt;&lt;p&gt;Handler3.Next=handler1; &lt;/p&gt;&lt;p&gt;&amp;lt;完&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2410190.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/21/2410190.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luckeryin/archive/2012/03/20/2407824.html</id><title type="text">Android Widget开发模板[转]</title><summary type="text">Android上的Widget使用了Java语言开发比W3C的Widget运行效率提高了不少，可以做更多的事情调用系统的API，除了UI上的限制外，我们可以考虑帮助系统完善一些appWidget，Android123给出大家一个开发Widget的模板。public class cwjWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { context.startSer..</summary><published>2012-03-20T05:53:00Z</published><updated>2012-03-20T05:53:00Z</updated><author><name>Lucker</name><uri>http://www.cnblogs.com/luckeryin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luckeryin/archive/2012/03/20/2407824.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luckeryin/archive/2012/03/20/2407824.html"/><content type="html">&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; Android上的Widget使用了Java语言开发比W3C的Widget运行效率提高了不少，可以做更多的事情调用系统的API，除了UI上的限制外，我们可以考虑帮助系统完善一些appWidget，Android123给出大家一个开发Widget的模板。&lt;/p&gt;&lt;p&gt;public class cwjWidget extends AppWidgetProvider {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onUpdate(Context context, AppWidgetManager appWidgetManager,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] appWidgetIds) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.startService(new Intent(context, UpdateService.class)); //这里创建一个服务，防止出现等待超时对话框&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static class UpdateService extends Service {&amp;nbsp; //这个内部的服务我们推荐新开一个线程操作一些容易阻塞的情况，比如网络下载等等&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onStart(Intent intent, int startId) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoteViews updateViews = buildUpdate(this);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ComponentName thisWidget = new ComponentName(this, cwjWidget.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AppWidgetManager manager = AppWidgetManager.getInstance(this);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; manager.updateAppWidget(thisWidget, updateViews);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public RemoteViews buildUpdate(Context context) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Resources res = context.getResources();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoteViews updateViews = new RemoteViews(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.getPackageName(), R.layout.main);&amp;nbsp; //主Widget的layout布局&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PendingIntent pendingIntent = PendingIntent.getActivity(context,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 /* no requestCode */,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Intent(android.provider.Settings.ACTION_DEVICE_INFO_SETTINGS),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 /* no flags */);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateViews.setOnClickPendingIntent(R.id.ui, pendingIntent); //单击view打开intent，目标为系统信息，就是上面的action位置&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateViews.setTextViewText(R.id.info,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android.os.Build.VERSION.CODENAME + " " +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android.os.Build.ID);&amp;nbsp;&amp;nbsp; //这里是API的获取系统版本的方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateViews.setTextViewText(R.id.changelist,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android.os.Build.FINGERPRINT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return updateViews;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IBinder onBind(Intent intent) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;有关涉及到的 androidmanifest.xml内容&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;manifest xmlns:android="&lt;a href="http://schemas.android.com/apk/res/android" style="text-decoration: none; color: #81a514; "&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; package="com.android123.widget"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionCode="1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:versionName="1.0"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uses-sdk android:minSdkVersion="3" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;application android:icon="@drawable/icon" android:label="@string/app_name"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;receiver android:name=".BuildWidget" android:label="android123_cwj"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intent-filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/receiver&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service android:name=".cwjWidget$UpdateService" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/application&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;/manifest&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; androidmanifest.xml上面提到的&amp;nbsp;&amp;nbsp;\res\xml\widget.xml文件内容&lt;/p&gt;&lt;p&gt;&amp;lt;appwidget-provider xmlns:android="&lt;a href="http://schemas.android.com/apk/res/android" style="text-decoration: none; color: #81a514; "&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;" android:minWidth="150dip" android:minHeight="72dip" android:updatePeriodMillis="0" android:initialLayout="@layout/widget" /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 有关 main.xml的内容为&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="&lt;a href="http://schemas.android.com/apk/res/android" style="text-decoration: none; color: #81a514; "&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:id="@+id/ui"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height="wrap_content"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:orientation="vertical"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:padding="6dip"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextView&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:id="@+id/info"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height="wrap_content"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:gravity="left"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:textSize="18dip"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TextView&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:id="@+id/changelist"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width="fill_parent"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height="wrap_content"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:gravity="left"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_marginTop="4dip"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; android:textSize="9dip"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luckeryin/aggbug/2407824.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luckeryin/archive/2012/03/20/2407824.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
