<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>水草树 &#187; 设计模式</title>
	<atom:link href="http://mifunny.info/category/study/design-patterns/feed" rel="self" type="application/rss+xml" />
	<link>http://mifunny.info</link>
	<description>走走停停看看，恍然大悟。</description>
	<lastBuildDate>Sun, 25 Mar 2012 15:09:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>按照自己的方式，去度过人生!</title>
		<link>http://mifunny.info/a-life-just-for-me-324.html</link>
		<comments>http://mifunny.info/a-life-just-for-me-324.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 13:08:08 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[Google热榜]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Study notes]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[かわいい玩具]]></category>
		<category><![CDATA[一半动漫]]></category>
		<category><![CDATA[听听音乐]]></category>
		<category><![CDATA[吹水唬滥]]></category>
		<category><![CDATA[大佛Linux]]></category>
		<category><![CDATA[就评电影]]></category>
		<category><![CDATA[心情札记]]></category>
		<category><![CDATA[时事快评]]></category>
		<category><![CDATA[本民经济]]></category>
		<category><![CDATA[此间Web]]></category>
		<category><![CDATA[漫谈人物]]></category>
		<category><![CDATA[版本控制]]></category>
		<category><![CDATA[疮痍广告]]></category>
		<category><![CDATA[百度风云榜]]></category>
		<category><![CDATA[设计模式]]></category>
		<category><![CDATA[读书时间]]></category>
		<category><![CDATA[软件笑谈]]></category>
		<category><![CDATA[那些技术]]></category>
		<category><![CDATA[人生]]></category>

		<guid isPermaLink="false">http://mifunny.info/a-life-just-for-me-324.html</guid>
		<description><![CDATA[昨晚11点, 第三次读完《明朝那些事儿》, 彻夜未眠. LD 并不是个聪明的人, 前两次均未理解所谓历史 所谓宿命 所谓自由. 这半年, 从09年9月, 第三次读《明》, 完全不同的感受, 石悅的历史观也许是悲观的, 正如他如是说. 然, LD 是悲愤的! 可以活得唯唯缩缩, 可以轰轰烈烈, 也可平平淡淡, 人之所以为人, 就是与别个不同. 10月, LD 曾慕名前往于谦祠, 旁边帅GG 惊呼: 于谦? 谁啊? 好像以前学过&#8230; 是啊~ 我也是. 强人只是那么一瞬间, 那一刻 绽放比凡人璀璨的花火, 之后殒灭为尘秽, 清澈、汙浊平凡无异. 生活的目标 一点足矣, 开心. 礼义廉耻 忠义孝廉 儿戏 儿戏, 二十几年来, 从没有这么坚定, 从没有这么澄净. 引用《火鳳燎原》中那句话: 属于我的这个年代, 将比任何朝代来得久远!]]></description>
			<content:encoded><![CDATA[<p>昨晚11点, 第三次读完《明朝那些事儿》, 彻夜未眠. </p>
<p>LD 并不是个聪明的人, 前两次均未理解所谓历史 所谓宿命 所谓自由. 这半年, 从09年9月, 第三次读《明》, 完全不同的感受, 石悅的历史观也许是悲观的, 正如他如是说. 然, LD 是悲愤的! </p>
<p>可以活得唯唯缩缩, 可以轰轰烈烈, 也可平平淡淡, 人之所以为人, 就是与别个不同. 10月, LD 曾慕名前往于谦祠, 旁边帅GG 惊呼: 于谦? 谁啊? 好像以前学过&#8230;  是啊~ 我也是. 强人只是那么一瞬间, 那一刻 绽放比凡人璀璨的花火, 之后殒灭为尘秽, 清澈、汙浊平凡无异.</p>
<p>生活的目标 一点足矣, 开心. 礼义廉耻 忠义孝廉 儿戏 儿戏, 二十几年来, 从没有这么坚定, 从没有这么澄净. 引用《火鳳燎原》中那句话: 属于我的这个年代, 将比任何朝代来得久远!</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/a-life-just-for-me-324.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DsCache 2.0, 这会儿功能够我用寥</title>
		<link>http://mifunny.info/dscache-2-0-31-out-313.html</link>
		<comments>http://mifunny.info/dscache-2-0-31-out-313.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 07:00:42 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Study notes]]></category>
		<category><![CDATA[设计模式]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[DsCache]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[文件缓存]]></category>
		<category><![CDATA[静态HTML]]></category>

		<guid isPermaLink="false">http://mifunny.info/dscache-2-0-31-out-313.html</guid>
		<description><![CDATA[上周基本无事,所以上班时间偷空把 DsCache 进化成加强版 2.0.r31. 这次主要加入了生成静态HTML 和 Memcached 内存缓存 这俩小崽子, 不错不错, 无痛转换缓存方式. DsCache 主页: http://code.google.com/p/dscache/ 2.0.r31 版源码: http://dscache.googlecode.com/files/DsCache_2.0.r31.tar.gz 使用举例:(源码目录下 test2) 1. 文件缓存 &#160;1 &#60;?php &#160;2 /** &#160;3 &#160;* 测试文件缓存&#160;&#160; &#160;4 &#160;* &#160;5 &#160;* @filesource testFileCache.php &#160;6 &#160;* @package DsCache &#160;7 &#160;* @subpackage test2 &#160;8 &#160;* @version $id: 0.1, utf8, Sat Dec 19 23:18:06 CST 2009 &#160;9 [...]]]></description>
			<content:encoded><![CDATA[<p>上周基本无事,所以上班时间偷空把 DsCache 进化成加强版 <a href="http://code.google.com/p/dscache/" title="DsCache 缓存">2.0.r31</a>. 这次主要加入了生成静态HTML 和 Memcached 内存缓存 这俩小崽子, 不错不错, 无痛转换缓存方式.</p>
<p> DsCache 主页: <a href="http://code.google.com/p/dscache/" title="DsCache 主页" >http://code.google.com/p/dscache/</a><br />
 2.0.r31 版源码: <a href="http://dscache.googlecode.com/files/DsCache_2.0.r31.tar.gz" title="DsCache 版源码">http://dscache.googlecode.com/files/DsCache_2.0.r31.tar.gz</a></p>
<p> <strong>使用举例:</strong>(源码目录下 test2)<br />
 <span id="more-313"></span></p>
<p style="font-size:1.2em;color:blue;">1. 文件缓存</p>
<blockquote style="background:#111111;color:#ffffff;"><p>
<font color="#ffff00">&nbsp;1 </font><font color="#ff40ff">&lt;?php</font><br />
<font color="#ffff00">&nbsp;2 </font><font color="#00ffff">/**</font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#00ffff">&nbsp;* 测试文件缓存&nbsp;&nbsp;</font><br />
<font color="#ffff00">&nbsp;4 </font><font color="#00ffff">&nbsp;*</font><br />
<font color="#ffff00">&nbsp;5 </font><font color="#00ffff">&nbsp;* @filesource testFileCache.php</font><br />
<font color="#ffff00">&nbsp;6 </font><font color="#00ffff">&nbsp;* @package DsCache </font><br />
<font color="#ffff00">&nbsp;7 </font><font color="#00ffff">&nbsp;* @subpackage test2 </font><br />
<font color="#ffff00">&nbsp;8 </font><font color="#00ffff">&nbsp;* @version $id: 0.1, utf8, Sat Dec 19 23:18:06 CST 2009</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#00ffff">&nbsp;* @author LD King &lt;kldscs[at]gmail.com&gt;</font><br />
<font color="#ffff00">10 </font><font color="#00ffff">&nbsp;* @copyright Copyleft (D.) 2007 &#8211; 2009 MiFunny China Inc.</font><br />
<font color="#ffff00">11 </font><font color="#00ffff">&nbsp;* @link <a href="http://mifunny.info/">http://mifunny.info/</a></font><br />
<font color="#ffff00">12 </font><font color="#00ffff">&nbsp;* @example </font><br />
<font color="#ffff00">13 </font><font color="#00ffff">&nbsp;*&nbsp;&nbsp; </font><br />
<font color="#ffff00">14 </font><font color="#00ffff">&nbsp;*/</font><br />
<font color="#ffff00">15 </font><font color="#ff40ff">require_once</font>&nbsp;&#8217;<font color="#ffff00">../Cache.class.php</font>&#8216;<font color="#ff40ff">;</font><br />
<font color="#ffff00">16 </font><br />
<font color="#ffff00">17 </font><font color="#00ffff">//注: 文件缓存支持所有变量, 不包括对象(拖慢速度) </font><br />
<font color="#ffff00">18 </font><font color="#ffff00">$</font><font color="#00ffff">_config</font><font color="#ff40ff">[</font>'<font color="#ffff00">DsCache</font>'<font color="#ff40ff">]</font>&nbsp;<font color="#ffff00">=</font>&nbsp;<font color="#00ff00">array(</font><br />
<font color="#ffff00">19 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_dir</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ffff">dirname</font><font color="#ff40ff">(</font><font color="#ffff00">__FILE__</font><font color="#ff40ff">)</font><font color="#ffff00">.</font>&#8216;<font color="#ffff00">/tmp</font>&#8216;,&nbsp;<font color="#00ffff">//缓存目录(必须),最好用绝对路径</font><br />
<font color="#ffff00">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">life_time</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#ffff00">900</font>,&nbsp;<font color="#00ffff">//全局缓存时间, 默认15min</font><br />
<font color="#ffff00">21 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">encoding_filename</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">true</font>,&nbsp;<font color="#00ffff">//用 md5 加密文件名, 默认打开</font><br />
<font color="#ffff00">22 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_dir_umask</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#ffff00">0755</font>,&nbsp;<font color="#00ffff">//建立子目录时的默认权限</font><br />
<font color="#ffff00">23 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">24 </font><font color="#ffff00">$</font><font color="#00ffff">date</font>&nbsp;<font color="#ffff00">=</font>&nbsp;&quot;<font color="#ffff00">cache time: </font>&quot;<font color="#ffff00">.</font><font color="#00ffff">date</font><font color="#ff40ff">(</font>&#8216;<font color="#ffff00">Y-m-d H:m:s</font>&#8216;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">25 </font><br />
<font color="#ffff00">26 </font><font color="#00ffff">//获得缓存</font><br />
<font color="#ffff00">27 </font><font color="#00ffff">//缓存 key 可以多级目录(避免单目录文件超过1k),</font><br />
<font color="#ffff00">28 </font><font color="#00ffff">//&nbsp;&nbsp;该缓存零时文件的路径为: tmp/cache/key/DsCache_{md5值}.php</font><br />
<font color="#ffff00">29 </font><font color="#ffff00">if</font><font color="#ff40ff">(</font>&nbsp;<font color="#ffff00">$</font><font color="#00ffff">c</font>&nbsp;<font color="#ffff00">=</font>&nbsp;Cache<font color="#ff40ff">::</font>get<font color="#ff40ff">(</font>&#8216;<font color="#ffff00">cache/key/date</font>&#8216;<font color="#ff40ff">)</font>&nbsp;<font color="#ff40ff">)</font><font color="#ff40ff">{</font><br />
<font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">echo</font>&nbsp;&quot;<font color="#ff40ff">{</font><font color="#ffff00">$</font><font color="#00ffff">c</font><font color="#ff40ff">}</font><font color="#ffff00">&lt;br/&gt;</font><font color="#ff40ff">\t\n</font><font color="#ffff00">Now: </font>&quot;<font color="#ffff00">.</font><font color="#00ffff">date</font><font color="#ff40ff">(</font>&#8216;<font color="#ffff00">Y-m-d H:m:s</font>&#8216;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">31 </font><font color="#ff40ff">}</font><font color="#ffff00">else</font><font color="#ff40ff">{</font><br />
<font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">echo</font>&nbsp;&quot;<font color="#ffff00">&lt;br/&gt;</font><font color="#ff40ff">\t\n</font><font color="#ffff00">Cache Failed!</font>&quot;<font color="#ff40ff">;</font><br />
<font color="#ffff00">33 </font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#ffff00">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">//设置缓存, 参数: 缓存唯一标识, 数据, 缓存时间</font><br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">//&nbsp;&nbsp;约定: 如果 &#8216;life_time&#8217; 设置为 0 表示不检查缓存有效期(即缓存永久有效).&nbsp;&nbsp; </font><br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;Cache<font color="#ff40ff">::</font>set<font color="#ff40ff">(</font>&#8216;<font color="#ffff00">cache/key/date</font>&#8216;, <font color="#ffff00">$</font><font color="#00ffff">date</font>, <font color="#ffff00">15</font><font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">37 </font><font color="#ff40ff">}</font><br />
<font color="#ffff00">38 </font><br />
<font color="#ffff00">39 </font><font color="#00ffff">//清除特定缓存</font><br />
<font color="#ffff00">40 </font><font color="#00ffff">//Cache::remove(&#8216;cache/key/date&#8217;);</font><br />
<font color="#ffff00">41 </font><br />
<font color="#ffff00">42 </font><font color="#00ffff">//清空缓存目录</font><br />
<font color="#ffff00">43 </font><font color="#00ffff">//Cache::clean();</font><br />
<font color="#ffff00">44 </font><br />
<font color="#ffff00">45 </font><br />
<font color="#ffff00">46 </font><font color="#ff40ff">?&gt;</font></p>
</blockquote>
<p style="font-size:1.2em;color:blue;">2. 生成静态HTML</p>
<blockquote style="background:#111111;color:#ffffff;"><p>
<font color="#ffff00">&nbsp;1 </font><font color="#ff40ff">&lt;?php</font><br />
<font color="#ffff00">&nbsp;2 </font><font color="#00ffff">/**</font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#00ffff">&nbsp;* 测试生成静态HTML文件</font><br />
<font color="#ffff00">&nbsp;4 </font><font color="#00ffff">&nbsp;*</font><br />
<font color="#ffff00">&nbsp;5 </font><font color="#00ffff">&nbsp;* @filesource testHtmlCache.php</font><br />
<font color="#ffff00">&nbsp;6 </font><font color="#00ffff">&nbsp;* @package DsCache</font><br />
<font color="#ffff00">&nbsp;7 </font><font color="#00ffff">&nbsp;* @subpackage test2</font><br />
<font color="#ffff00">&nbsp;8 </font><font color="#00ffff">&nbsp;* @version $id: 0.1, utf8, Sat Dec 19 23:47:21 CST 2009</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#00ffff">&nbsp;* @author LD King &lt;kldscs[at]gmail.com&gt;</font><br />
<font color="#ffff00">10 </font><font color="#00ffff">&nbsp;* @copyright Copyleft (D.) 2007 &#8211; 2009 MiFunny China Inc.</font><br />
<font color="#ffff00">11 </font><font color="#00ffff">&nbsp;* @link <a href="http://mifunny.info/">http://mifunny.info/</a></font><br />
<font color="#ffff00">12 </font><font color="#00ffff">&nbsp;* @example </font><br />
<font color="#ffff00">13 </font><font color="#00ffff">&nbsp;*&nbsp;&nbsp; </font><br />
<font color="#ffff00">14 </font><font color="#00ffff">&nbsp;*/</font><br />
<font color="#ffff00">15 </font><br />
<font color="#ffff00">16 </font><font color="#ff40ff">require_once</font>&nbsp;&#8217;<font color="#ffff00">../Cache.class.php</font>&#8216;<font color="#ff40ff">;</font><br />
<font color="#ffff00">17 </font><font color="#ff40ff">require_once</font>&nbsp;&#8217;<font color="#ffff00">../ob_html_cache.func.php</font>&#8216;<font color="#ff40ff">;</font><br />
<font color="#ffff00">18 </font><br />
<font color="#ffff00">19 </font><font color="#ffff00">$</font><font color="#00ffff">_config</font><font color="#ff40ff">[</font>'<font color="#ffff00">DsCache</font>'<font color="#ff40ff">]</font>&nbsp;<font color="#ffff00">=</font>&nbsp;<font color="#00ff00">array(</font><br />
<font color="#ffff00">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_type</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;&#8217;<font color="#ffff00">htmlfile</font>&#8216;,&nbsp;<font color="#00ffff">//缓存方式(必须), htmlfile 这个模块只能保存字符串,但文件操作最快</font><br />
<font color="#ffff00">21 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_dir</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ffff">dirname</font><font color="#ff40ff">(</font><font color="#ffff00">__FILE__</font><font color="#ff40ff">)</font><font color="#ffff00">.</font>&#8216;<font color="#ffff00">/tmp</font>&#8216;,&nbsp;<font color="#00ffff">//缓存目录(必须)</font><br />
<font color="#ffff00">22 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_dir_umask</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#ffff00">0777</font>,&nbsp;<font color="#00ffff">//子目录权限</font><br />
<font color="#ffff00">23 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">life_time</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#ffff00">900</font>,&nbsp;<font color="#00ffff">//全局缓存时间 900s.</font><br />
<font color="#ffff00">24 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">gizp</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">true</font>,&nbsp;<font color="#00ffff">//使用gzip压缩输出页面</font><br />
<font color="#ffff00">25 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">26 </font><br />
<font color="#ffff00">27 </font><font color="#00ffff">//调用 ob_cache 函数</font><br />
<font color="#ffff00">28 </font><font color="#00ffff">//&nbsp;&nbsp;函数自动运行: 第一次载入,缓存当前页; 第二次载入,显示缓存并中断程序;</font><br />
<font color="#ffff00">29 </font>ob_cache<font color="#ff40ff">()</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">30 </font><font color="#00ffff">//&nbsp;&nbsp;缓存显示最后会加上 &lt;!&#8211; DsCached &#8211;&gt;</font><br />
<font color="#ffff00">31 </font><br />
<font color="#ffff00">32 </font><font color="#00ffff">date_default_timezone_set</font><font color="#ff40ff">(</font>&#8216;<font color="#ffff00">UTC</font>&#8216;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">33 </font><font color="#ff40ff">echo</font>&nbsp;&quot;<font color="#ffff00">What is the time? Oh~~ </font>&quot;<font color="#ffff00">.</font><font color="#00ffff">date</font><font color="#ff40ff">(</font>&quot;<font color="#ffff00">D M j G:i:s T Y</font>&quot;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">34 </font><br />
<font color="#ffff00">35 </font><font color="#ff40ff">?&gt;</font></p>
</blockquote>
<p style="font-size:1.2em;color:blue;">3. 内存缓存 Memcached</p>
<blockquote style="background:#111111;color:#ffffff;"><p>
<font color="#ffff00">&nbsp;1 </font><font color="#ff40ff">&lt;?php</font><br />
<font color="#ffff00">&nbsp;2 </font><font color="#00ffff">/**</font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#00ffff">&nbsp;*&nbsp;&nbsp;测试 Memcached 内存缓存 </font><br />
<font color="#ffff00">&nbsp;4 </font><font color="#00ffff">&nbsp;*</font><br />
<font color="#ffff00">&nbsp;5 </font><font color="#00ffff">&nbsp;* @filesource testMemcached.php</font><br />
<font color="#ffff00">&nbsp;6 </font><font color="#00ffff">&nbsp;* @package DsCache</font><br />
<font color="#ffff00">&nbsp;7 </font><font color="#00ffff">&nbsp;* @subpackage test2</font><br />
<font color="#ffff00">&nbsp;8 </font><font color="#00ffff">&nbsp;* @version $id: 0.1, utf8, Sun Dec 20 00:06:50 CST 2009</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#00ffff">&nbsp;* @author LD King &lt;kldscs[at]gmail.com&gt;</font><br />
<font color="#ffff00">10 </font><font color="#00ffff">&nbsp;* @copyright Copyleft (D.) 2007 &#8211; 2009 MiFunny China Inc.</font><br />
<font color="#ffff00">11 </font><font color="#00ffff">&nbsp;* @link <a href="http://mifunny.info/">http://mifunny.info/</a></font><br />
<font color="#ffff00">12 </font><font color="#00ffff">&nbsp;* @example </font><br />
<font color="#ffff00">13 </font><font color="#00ffff">&nbsp;*&nbsp;&nbsp; </font><br />
<font color="#ffff00">14 </font><font color="#00ffff">&nbsp;*/</font><br />
<font color="#ffff00">15 </font><font color="#ff40ff">require_once</font>&nbsp;&#8217;<font color="#ffff00">../Cache.class.php</font>&#8216;<font color="#ff40ff">;</font><br />
<font color="#ffff00">16 </font><br />
<font color="#ffff00">17 </font><font color="#00ffff">//php-memcached主页: <a href="http://pecl.php.net/package/memcached">http://pecl.php.net/package/memcached</a></font><br />
<font color="#ffff00">18 </font><font color="#00ffff">//注: 内存缓存支持所有变量, 也包括对象 </font><br />
<font color="#ffff00">19 </font><font color="#ffff00">$</font><font color="#00ffff">_config</font><font color="#ff40ff">[</font>'<font color="#ffff00">DsCache</font>'<font color="#ff40ff">]</font>&nbsp;<font color="#ffff00">=</font>&nbsp;<font color="#00ff00">array(</font><br />
<font color="#ffff00">20 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">cache_type</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;&#8217;<font color="#ffff00">phpmemcached</font>&#8216;,&nbsp;<font color="#00ffff">//缓存类型(必须)</font><br />
<font color="#ffff00">21 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">servers</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">array(</font><br />
<font color="#ffff00">22 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">array(</font>&#8216;<font color="#ffff00">host</font>&#8216;<font color="#00ff00">=&gt;</font>&#8216;<font color="#ffff00">127.0.0.1</font>&#8216;,&nbsp;&#8217;<font color="#ffff00">port</font>&#8216;<font color="#00ff00">=&gt;</font>&#8216;<font color="#ffff00">11211</font>&#8216;,&nbsp;&#8217;<font color="#ffff00">weight</font>&#8216;<font color="#00ff00">=&gt;</font><font color="#ffff00">99</font><font color="#00ff00">)</font>,<br />
<font color="#ffff00">23 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">)</font>,&nbsp;<font color="#00ffff">//服务器列表(必须)</font><br />
<font color="#ffff00">24 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">life_time</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#ffff00">900</font>,&nbsp;<font color="#00ffff">//全局缓存时间, 默认15min</font><br />
<font color="#ffff00">25 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">persistent</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">true</font>,&nbsp;<font color="#00ffff">//持久连接</font><br />
<font color="#ffff00">26 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">compredded</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">false</font>,&nbsp;<font color="#00ffff">//压缩数据</font><br />
<font color="#ffff00">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;&#8217;<font color="#ffff00">encoding_key</font>&#8216;&nbsp;<font color="#00ff00">=&gt;</font>&nbsp;<font color="#00ff00">false</font>,&nbsp;<font color="#00ffff">//加密 key,默认false</font><br />
<font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ff00">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">29 </font><font color="#ffff00">$</font><font color="#00ffff">date</font>&nbsp;<font color="#ffff00">=</font>&nbsp;&quot;<font color="#ffff00">cache time: </font>&quot;<font color="#ffff00">.</font><font color="#00ffff">date</font><font color="#ff40ff">(</font>&#8216;<font color="#ffff00">Y-m-d H:m:s</font>&#8216;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">30 </font><font color="#00ffff">//var_dump( $_config );</font><br />
<font color="#ffff00">31 </font><font color="#00ffff">//获得缓存</font><br />
<font color="#ffff00">32 </font><font color="#ffff00">if</font><font color="#ff40ff">(</font>&nbsp;<font color="#ffff00">$</font><font color="#00ffff">c</font>&nbsp;<font color="#ffff00">=</font>&nbsp;Cache<font color="#ff40ff">::</font>get<font color="#ff40ff">(</font>&#8216;<font color="#ffff00">cache_key_date</font>&#8216;<font color="#ff40ff">)</font>&nbsp;<font color="#ff40ff">)</font><font color="#ff40ff">{</font><br />
<font color="#ffff00">33 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">echo</font>&nbsp;&quot;<font color="#ff40ff">{</font><font color="#ffff00">$</font><font color="#00ffff">c</font><font color="#ff40ff">}</font><font color="#ffff00">&lt;br/&gt;</font><font color="#ff40ff">\t\n</font><font color="#ffff00">Now: </font>&quot;<font color="#ffff00">.</font><font color="#00ffff">date</font><font color="#ff40ff">(</font>&#8216;<font color="#ffff00">Y-m-d H:m:s</font>&#8216;<font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">34 </font><font color="#ff40ff">}</font><font color="#ffff00">else</font><font color="#ff40ff">{</font><br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">echo</font>&nbsp;&quot;<font color="#ffff00">&lt;br/&gt;</font><font color="#ff40ff">\t\n</font><font color="#ffff00">Cache Failed!</font>&quot;<font color="#ff40ff">;</font><br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">//设置缓存, 参数: 缓存唯一标识, 数据, 缓存时间</font><br />
<font color="#ffff00">38 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff">//&nbsp;&nbsp;约定: 如果 &#8216;life_time&#8217; 设置为 0 表示不检查缓存有效期(即缓存永久有效).&nbsp;&nbsp; </font><br />
<font color="#ffff00">39 </font>&nbsp;&nbsp;&nbsp;&nbsp;Cache<font color="#ff40ff">::</font>set<font color="#ff40ff">(</font>&#8216;<font color="#ffff00">cache_key_date</font>&#8216;, <font color="#ffff00">$</font><font color="#00ffff">date</font>, <font color="#ffff00">15</font><font color="#ff40ff">)</font><font color="#ff40ff">;</font><br />
<font color="#ffff00">40 </font><font color="#ff40ff">}</font><br />
<font color="#ffff00">41 </font><br />
<font color="#ffff00">42 </font><font color="#00ffff">//清除特定缓存</font><br />
<font color="#ffff00">43 </font><font color="#00ffff">//Cache::remove(&#8216;cache_key_date&#8217;);</font><br />
<font color="#ffff00">44 </font><br />
<font color="#ffff00">45 </font><font color="#00ffff">//清空缓存</font><br />
<font color="#ffff00">46 </font><font color="#00ffff">//Cache::clean();</font><br />
<font color="#ffff00">47 </font><br />
<font color="#ffff00">48 </font><font color="#ff40ff">?&gt;</font></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/dscache-2-0-31-out-313.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第13课 与设计模式相处</title>
		<link>http://mifunny.info/on-the-real-world-model-116.html</link>
		<comments>http://mifunny.info/on-the-real-world-model-116.html#comments</comments>
		<pubDate>Mon, 22 Sep 2008 12:32:07 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[定义]]></category>

		<guid isPermaLink="false">http://mifunny.info/on-the-real-world-model-116.html</guid>
		<description><![CDATA[“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样，你就能一次又一次地使用该方案而不必做重复劳动。” ── 建筑家 Christopher Alexander 模式 是在某情境 (context) 下，针对某问题的某种解决方案。 情境 就是应用某个模式的情况。这应该是会不断出现的情况。 [ 我要如何准时上班？ ] 问题 就是你想在某情境下达到的目标，但也可以是某情境下的约束。 [ 我将钥匙锁在车里了。] 解决方案 就是你所追求的： 一个通用的设计，用来解决约束，达到目标。 [ 打破窗户，进入车内，启动引擎，然后开车上班。] 成本 解决方案所花费的才力 (财力)。 [ 窗户的价值。] 模式是解决问题的方法，用于不用无所谓; 但当我们应用模式时，就应该考虑怎么才能更好的解决问题 (反之，去除模式)。 最后的模式连连看 装饰者 ── 包装一个对象，以提供新的行为。 状态 ── 封装了基于状态的行为，并使用委托在行为之间切换。 迭代器 ── 在对象的集合中游走，而不暴露集合的实现。 外观 ── 简化一群类的接口。 策略 ── 封装可以互换的行为，并使用委托来决定要使用哪一个。 代理 ── 包装对象，以控制对此对象的访问。 工厂方法 ── 由子类决定要创建的具体类是哪一个。 适配器 ── [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样，你就能一次又一次地使用该方案而不必做重复劳动。”	── 建筑家  Christopher Alexander</p>
<p><strong>模式</strong> 是在某情境 (context) 下，针对某问题的某种解决方案。
<ul style="list-style-type: none">
<li><i>情境</i> 就是应用某个模式的情况。这应该是会不断出现的情况。<br />  [ 我要如何准时上班？ ]</li>
<li><i>问题</i> 就是你想在某情境下达到的目标，但也可以是某情境下的约束。<br />  [ 我将钥匙锁在车里了。]</li>
<li><i>解决方案</i> 就是你所追求的： 一个通用的设计，用来解决约束，达到目标。 <br /> [ 打破窗户，进入车内，启动引擎，然后开车上班。]</li>
<li><i>成本</i> 解决方案所花费的才力 (财力)。 <br /> [ 窗户的价值。]</li>
</ul>
<p style="text-indent: 2em" >模式是解决问题的方法，用于不用无所谓; 但当我们应用模式时，就应该考虑怎么才能更好的解决问题 (反之，去除模式)。</p>
<p><span id="more-116"></span><br />
<b>最后的模式连连看</b>
<ol style="list-style-type: decimal">
<li>	装饰者	──	包装一个对象，以提供新的行为。</li>
<li>状态	──	封装了基于状态的行为，并使用委托在行为之间切换。</li>
<li>	迭代器	──	在对象的集合中游走，而不暴露集合的实现。</li>
<p>	
<li>外观	──	简化一群类的接口。 </li>
<li>策略	──	封装可以互换的行为，并使用委托来决定要使用哪一个。</li>
<li>代理	──	包装对象，以控制对此对象的访问。</li>
<p>
<li>工厂方法	──	由子类决定要创建的具体类是哪一个。</li>
<li>适配器	──	封装对象，并提供不同的接口。</li>
<li>观察者	──	让对象能够在状态改变时被通知。</li>
<p>
<li>模板方法	──	由子类决定如何实现一个算法中的步骤。</li>
<li>组合	──	   客户用一致的方式处理对象集合和单个对象。</li>
<li>单件	──	确保只有一个对象被创建。</li>
<p>
<li>抽象工厂	──	允许客户创建对象的家族，而无需指定他们的具体类。</li>
<li>命令	──	封装请求成为对象。</li>
</ol>
<p style="text-indent: 2em; color:gray;" >终于把这本书啃完了。 每次读完一本书都是感觉空虚，然而这次是累！很累！ 接着是恐惧，井底之蛙的恐惧，怎么才能填补这片空白？ ……  后话: 一般认为设计模式23个，3个分类，无所谓啦;	 我看完这本书唯一学到的就是 ── 随性而为。</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/on-the-real-world-model-116.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第12课 复合模式</title>
		<link>http://mifunny.info/mvc-of-head-first-design-patterns-114.html</link>
		<comments>http://mifunny.info/mvc-of-head-first-design-patterns-114.html#comments</comments>
		<pubDate>Sat, 20 Sep 2008 12:48:01 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[复合]]></category>

		<guid isPermaLink="false">http://mifunny.info/mvc-of-head-first-design-patterns-114.html</guid>
		<description><![CDATA[模式的模式: 模式通常被一起使用，并被组合在同一个设计解决方案中。 复合模式在一个解决方案中结合两个和多个模式，以解决一般或重复发生的问题。 MVC (Model-View-Controller) : 模型利用“观察者”让控制器和视图可以随最新的状态改变而更新。另一方面，视图和控制器则实现了“策略模式”。控制器是视图的行为; 视图内部使用组合模式来管理显示组件。 FleaPHP 的MVC解释图 很好的标示了这种模式： 模型使用观察者模式，以便观察者更新，同时保持两者之间的解耦。 控制器是视图的策略，视图可以使用不同的控制器实现，得到不同的行为。 视图使用组合模式实现用户界面，用户界面通常组合了嵌套的组件，像面板、框架和按钮。 这些模式携手合作，把MVC模式的三层解耦，这样可以保持设计干净又有弹性。 适配器模式用来将新的模型适配成已有的视图和控制器。 复合模式： 复合模式结合两个或以上的模式，组合一个解决方案，解决一再发生的一般性问题。（ MVC 结合观察者模式、策略模式、组合模式） 终于到了MVC模式，其实刚刚知道FleaPHP时就知道这种模式，但没有学过设计模式，当然入门实难，根本分不清框架代码为什么这么写？ 起码现在已经理解。这里有一本书，据说FleaPHP老大推荐的，很值得一看： 企业应用架构模式中文版.pdf]]></description>
			<content:encoded><![CDATA[<p>模式的模式:
<ul style="list-style-type: square">
<li>模式通常被一起使用，并被组合在同一个设计解决方案中。</li>
<li>复合模式在一个解决方案中结合两个和多个模式，以解决一般或重复发生的问题。</li>
</ul>
<p style="text-indent: 2em" ><b>MVC</b> (Model-View-Controller)  :  模型利用“观察者”让控制器和视图可以随最新的状态改变而更新。另一方面，视图和控制器则实现了“策略模式”。控制器是视图的行为; 视图内部使用组合模式来管理显示组件。</p>
<p>FleaPHP 的MVC解释图 很好的标示了这种模式：<br />
<span id="more-114"></span>
<p align="center"><img class="frame" src="http://lh3.ggpht.com/kldscs/SNTjlZvpn4I/AAAAAAAAA2c/IuSZ1lrwxGU/s800/02-mvc_in_fleaphp.png" title="FleaPHP MVC图"  alt="FleaPHP MVC" /></p>
<ul style="list-style-type: circle">
<li>模型使用观察者模式，以便观察者更新，同时保持两者之间的解耦。</li>
<li>控制器是视图的策略，视图可以使用不同的控制器实现，得到不同的行为。</li>
<li>	视图使用组合模式实现用户界面，用户界面通常组合了嵌套的组件，像面板、框架和按钮。</li>
<li></li>
<li>这些模式携手合作，把MVC模式的三层解耦，这样可以保持设计干净又有弹性。</li>
<li></li>
<li>适配器模式用来将新的模型适配成已有的视图和控制器。</li>
</ul>
<hr />
<p style="text-indent: 2em" ><strong>复合模式</strong>： 复合模式结合两个或以上的模式，组合一个解决方案，解决一再发生的一般性问题。（ MVC 结合观察者模式、策略模式、组合模式）</p>
<p style="text-indent: 2em; color: gray;" >终于到了MVC模式，其实刚刚知道FleaPHP时就知道这种模式，但没有学过设计模式，当然入门实难，根本分不清框架代码为什么这么写？ 起码现在已经理解。<br />这里有一本书，据说FleaPHP老大推荐的，很值得一看： <a href="http://dl.getdropbox.com/u/158505/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8%E6%9E%B6%E6%9E%84%E6%A8%A1%E5%BC%8F%E4%B8%AD%E6%96%87%E7%89%88.pdf" target="_bank" title="企业应用架构模式中文版" alt="企业应用架构模式 中文版 pdf" >企业应用架构模式中文版.pdf</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/mvc-of-head-first-design-patterns-114.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第11课 代理模式</title>
		<link>http://mifunny.info/proxy-of-head-first-design-patterns-111.html</link>
		<comments>http://mifunny.info/proxy-of-head-first-design-patterns-111.html#comments</comments>
		<pubDate>Tue, 16 Sep 2008 09:18:30 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[代理]]></category>

		<guid isPermaLink="false">http://mifunny.info/proxy-of-head-first-design-patterns-111.html</guid>
		<description><![CDATA[OOP村齐家的少爷喜欢上了尹家的小姐，但有鉴于礼法，双方长辈反对， 两个年轻人不能长时间见面。于是齐少爷的书童 和 尹小姐的丫环当起了连络人。 尹小姐想多了解齐少爷，派丫环去探探舌漏，丫环找到从小就跟着齐家少爷的书童，书童乘机说尽好话…… [ 这里丫环就是小姐的代理; 小姐要了解少爷，所以小姐是客户对象，丫环是客户辅助对象，书童是服务辅助对象，少爷是服务对象; 这个模式叫远程代理。] 齐少爷和尹小姐书信来往好久了，齐少爷记不得以前写过什么良言美句，书童会意，把保存的书信拿了出来参考。[ 书童就好比缓存代理 ] 齐家毕竟是大户人家，也指望齐少爷他日金榜题名，齐老太太天天来检查齐少爷的读书情况。这天少爷溜出去与尹小姐私会，书童穿了少爷的衣服在窗后装模作样，老太太看到窗影很高兴。 [ 虚拟代理 ] 书童身材和少爷还是比较相似的，少爷毕竟是老爷的儿子，萧峰和萧远山也很难分清的。 这天，齐老爷有点喝高了，想去留香院找小春，想起了儿子(老不正经！)，于是和书童(正扮演少爷)说: 今天你扮成我，你的事过几天我做主。 于是书童又穿上老爷的衣服，贴上胡子，还有模有样。 [ 装饰者模式: 川剧《变脸》 == 本体就是那个，但外表已经改变。 ] 代理模式: 为另一个对象提供一个替身或占位符以控制对这个对象的访问。[ 使用代理模式创建代表(representative)对象，让代表对象控制某对象的访问，被代理的对象可以是远程的对象 、创建开销大的对象或需要安全控制的对象。 ]&#124;&#124;_____> 远程代理控制访问远程对象;&#124;_____> 虚拟代理控制访问创建开销大的资源;&#124;_____> 保护代理基于权限控制对资源的访问; 设计原则: 类应该只有一个改变的理由。 模式对比： 装饰者 ── 包装另一个对象，并提供额外的行为; 外观 ── 包装许多对象以简化它们的接口; 代理 ── 包装另一个对象，并控制对它的访问; 适配器 ── 包装另一个对象，并提供不同的接口;]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >OOP村齐家的少爷喜欢上了尹家的小姐，但有鉴于礼法，双方长辈反对， 两个年轻人不能长时间见面。于是齐少爷的书童 和 尹小姐的丫环当起了连络人。 尹小姐想多了解齐少爷，派丫环去探探舌漏，丫环找到从小就跟着齐家少爷的书童，书童乘机说尽好话…… [ 这里丫环就是小姐的代理; 小姐要了解少爷，所以小姐是客户对象，丫环是客户辅助对象，书童是服务辅助对象，少爷是服务对象; 这个模式叫远程代理。] </p>
<p style="text-indent: 2em" >齐少爷和尹小姐书信来往好久了，齐少爷记不得以前写过什么良言美句，书童会意，把保存的书信拿了出来参考。[ 书童就好比缓存代理 ]</p>
<p style="text-indent: 2em" >齐家毕竟是大户人家，也指望齐少爷他日金榜题名，齐老太太天天来检查齐少爷的读书情况。这天少爷溜出去与尹小姐私会，书童穿了少爷的衣服在窗后装模作样，老太太看到窗影很高兴。 [ 虚拟代理 ]</p>
<p style="text-indent: 2em" >书童身材和少爷还是比较相似的，少爷毕竟是老爷的儿子，萧峰和萧远山也很难分清的。 这天，齐老爷有点喝高了，想去留香院找小春，想起了儿子(老不正经！)，于是和书童(正扮演少爷)说: 今天你扮成我，你的事过几天我做主。 于是书童又穿上老爷的衣服，贴上胡子，还有模有样。 [ 装饰者模式: 川剧《变脸》 == 本体就是那个，但外表已经改变。 ] </p>
<p><span id="more-111"></span><br />
<hr />
<p style="text-indent: 2em" >代理模式: 为另一个对象提供一个替身或占位符以控制对这个对象的访问。<br />[ 使用代理模式创建代表(representative)对象，让代表对象控制某对象的访问，被代理的对象可以是远程的对象 、创建开销大的对象或需要安全控制的对象。  ]<br />|<br />|_____>   远程代理控制访问远程对象;<br />|_____>   	虚拟代理控制访问创建开销大的资源;<br />|_____>   保护代理基于权限控制对资源的访问;</p>
<p>设计原则: <strong>类应该只有一个改变的理由</strong>。<br />
<br />
模式对比：
<ul style="list-style-type: none">
<li>装饰者 ── 包装另一个对象，并提供额外的行为;</li>
<li>外观 ── 包装许多对象以简化它们的接口;</li>
<li>代理 ── 包装另一个对象，并控制对它的访问;</li>
<li>适配器 ── 包装另一个对象，并提供不同的接口;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/proxy-of-head-first-design-patterns-111.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>九月中心情+设计模式小结</title>
		<link>http://mifunny.info/write-at-09-13-108.html</link>
		<comments>http://mifunny.info/write-at-09-13-108.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:47:15 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[心情札记]]></category>
		<category><![CDATA[设计模式]]></category>
		<category><![CDATA[小结]]></category>
		<category><![CDATA[心情]]></category>
		<category><![CDATA[骗子]]></category>

		<guid isPermaLink="false">http://mifunny.info/write-at-09-13-108.html</guid>
		<description><![CDATA[扯淡又乱文终于再次出现了 1.骗子: 昨天(08.09.12)清晨我老爸接到一个加急电话，XX老师称本人英勇地和一辆巨型卡车进行冲撞，结果重伤入院; ── 于是还在和周公下棋的我被手机吵醒，是紧张的老爸;── &#8216;是的，我没事！&#8217; 鄙人近来紧持锻炼身体，但还不至于疯到和擎天柱较劲。 ─ _ _ ─ &#62; 我家里的电话只在班级通讯录中才有留，难道学校数据库泄漏？ 事实上我对它觊觎已久。 鄙视那些利用情亲骗取他人钱财的勒涩、垃圾、败类！ 2.红尘之网络: 我住的红尘公寓网络条件越来越差了，电信竟然还搞用户名+密码+登录软件加密; 猴子下了个破解软件，搞定。之后就是现在的情况 ── 不定时断线。还好我早就戒了游戏，不然那可是悲愤的怒吼…… (这篇文章能不能发，就看天意了) 3.博客: 当我建博时，对网络应用不是很了解，个人博客对于我只是玩具加记事本？ 现在还是这个情况，近来自学又上课（对我来说，这学期平均每天3节课实在浪费时间，讲师副教授不知所谓，我不是好学生，他45分钟讲一堆理论不如我google一下15分钟）; Google Reader离线看订阅的博客内容，也就很少去留言了。懒…… 4.设计模式: 学到第十章了，脑子有点反应不过来，主要是经验太少。这个几乎和软件工程类同，一时半会入门就不错了，即使稍窥门径也是一个赚。但设计模式实在太吸引我，学面向对象时，知道类与继承，连老师也少讲接口和抽象。─ _ _ ─ &#62; 当年有个搞开发的牛X来上课，留下名言： &#8220;老师，只有在社会上混不下去的才来教书！&#8221; 偏激但不失道理，上学期《Web开发》课程设计，XX 问同学的作业(校友录系统): 你这个是动态网页吗？ 郁闷，大学大学大学&#8230; ─ _ _ ─ &#62; 晚上我说咱也快打包走人了，连个念想也没留下，猴子回答: 不必费心，学费都留这儿了。 ─ _ _ ─ &#62; 这还是&#8221;设计模式&#8221;小结吗？ 好吧，所谓设计模式我的理解就是合理利用接口、抽象，时而使对象耦合，时而解耦对象，保持对象关系为我所用，最终实现易维护，强扩展。 似乎什么也没说嘛，到此止步.]]></description>
			<content:encoded><![CDATA[<p>扯淡又乱文终于再次出现了 <img src='http://mifunny.info/blog/wp-includes/images/smilies/icon_evil.gif' alt=':evil:' class='wp-smiley' />  </p>
<p style="text-indent: 2em" >1.<strong>骗子</strong>: 昨天(08.09.12)清晨我老爸接到一个加急电话，XX老师称本人英勇地和一辆巨型卡车进行冲撞，结果重伤入院;  ──     于是还在和周公下棋的我被手机吵醒，是紧张的老爸;── &#8216;是的，我没事！&#8217; 鄙人近来紧持锻炼身体，但还不至于疯到和擎天柱较劲。 <br />─ _ _ ─  &gt;  我家里的电话只在班级通讯录中才有留，难道学校数据库泄漏？ 事实上我对它觊觎已久。 鄙视那些利用情亲骗取他人钱财的勒涩、垃圾、败类！</p>
<p style="text-indent: 2em" >2.<strong>红尘之网络</strong>: 我住的红尘公寓网络条件越来越差了，电信竟然还搞用户名+密码+登录软件加密; 猴子下了个破解软件，搞定。之后就是现在的情况  ──  不定时断线。还好我早就戒了游戏，不然那可是悲愤的怒吼…… (这篇文章能不能发，就看天意了)</p>
<p><span id="more-108"></span></p>
<p style="text-indent: 2em" >3.<strong>博客</strong>: 当我建博时，对网络应用不是很了解，个人博客对于我只是玩具加记事本？ 现在还是这个情况，近来自学又上课（对我来说，这学期平均每天3节课实在浪费时间，讲师副教授不知所谓，我不是好学生，他45分钟讲一堆理论不如我google一下15分钟）; Google Reader离线看订阅的博客内容，也就很少去留言了。懒……</p>
<p style="text-indent: 2em" >4.<strong>设计模式</strong>: 学到第十章了，脑子有点反应不过来，主要是经验太少。这个几乎和软件工程类同，一时半会入门就不错了，即使稍窥门径也是一个赚。但设计模式实在太吸引我，学面向对象时，知道类与继承，连老师也少讲接口和抽象。<br />─ _ _ ─  &gt;  当年有个搞开发的牛X来上课，留下名言： &#8220;老师，只有在社会上混不下去的才来教书！&#8221; 偏激但不失道理，上学期《Web开发》课程设计，XX 问同学的作业(校友录系统): 你这个是动态网页吗？ 郁闷，大学大学大学&#8230; <br />─ _ _ ─  &gt;  晚上我说咱也快打包走人了，连个念想也没留下，猴子回答: 不必费心，学费都留这儿了。</p>
<p>─ _ _ ─  &gt;  这还是&#8221;设计模式&#8221;小结吗？ 好吧，所谓设计模式我的理解就是合理利用接口、抽象，时而使对象耦合，时而解耦对象，保持对象关系为我所用，最终实现易维护，强扩展。 似乎什么也没说嘛，到此止步.</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/write-at-09-13-108.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第十课 状态模式</title>
		<link>http://mifunny.info/state-of-head-first-design-patterns-107.html</link>
		<comments>http://mifunny.info/state-of-head-first-design-patterns-107.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 14:42:41 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[state]]></category>
		<category><![CDATA[状态]]></category>

		<guid isPermaLink="false">http://mifunny.info/state-of-head-first-design-patterns-107.html</guid>
		<description><![CDATA[状态模式： 允许对象在内部状态改变时改变它的行为，对象看起来好像修改了它的类。 &#8212;&#8212;&#62; 策略模式: 由客户主动指定context对象所要组合的策略对象是哪一个。 把各个状态分别继承于状态接口， 并得到上下文类对象; 在上下文类中，所有的状态都在构造器（主类）中创建并赋值, 配合函数处理状态（调用状态对象）; 当前状态在状态对象集合中游走改变，以反应出context内部的状态，因此，context的行为也会跟着改变。（由上下文类和当前状态决定之后状态） 模式对比: 状态 ── 封装基于状态的行为，并将行为委托到当前状态; 策略 ── 将可以互换的行为封装起来，然后使用委托的方法，决定使用哪一个行为; 模板方法 ── 由子类决定如何实现算法种的某些步骤; 还是最喜欢 &#8216;策略模式&#8217;，简单容易理解，好用 ^{}^ ; 模板也不错，hook这个东东不一般; 状态模式之前在《用星际学习PHP设计模式》中的坦克例子中看过，把状态抽象，通过对象的互传进行回调。 终于到第10章了，OOP果然不是好学的&#8230;呼&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >状态模式： 允许对象在内部状态改变时改变它的行为，对象看起来好像修改了它的类。 <br />&#8212;&#8212;&gt; 策略模式: 由客户主动指定context对象所要组合的策略对象是哪一个。</p>
<ul style="list-style-type: none;">
<li>把各个状态分别继承于状态接口， 并得到上下文类对象;</li>
<li>在上下文类中，所有的状态都在构造器（主类）中创建并赋值,  配合函数处理状态（调用状态对象）; </li>
<li></li>
<p>当前状态在状态对象集合中游走改变，以反应出context内部的状态，因此，context的行为也会跟着改变。（由上下文类和当前状态决定之后状态）</ul>
<p><span id="more-107"></span><br />
<b>模式对比:</b>
<ul style="list-style-type: none;">
<li>状态 ── 封装基于状态的行为，并将行为委托到当前状态;</li>
<li>策略 ── 将可以互换的行为封装起来，然后使用委托的方法，决定使用哪一个行为;</li>
<li>模板方法 ── 由子类决定如何实现算法种的某些步骤;</li>
</ul>
<p style="text-indent: 2em; color:gray;" >还是最喜欢 &#8216;策略模式&#8217;，简单容易理解，好用 ^{}^ ; 模板也不错，hook这个东东不一般; 状态模式之前在《用星际学习PHP设计模式》中的坦克例子中看过，把状态抽象，通过对象的互传进行回调。</p>
<p>终于到第10章了，OOP果然不是好学的&#8230;呼&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/state-of-head-first-design-patterns-107.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第九课 迭代器</title>
		<link>http://mifunny.info/iterator-of-head-first-design-patterns-106.html</link>
		<comments>http://mifunny.info/iterator-of-head-first-design-patterns-106.html#comments</comments>
		<pubDate>Wed, 10 Sep 2008 15:13:56 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[iterator]]></category>
		<category><![CDATA[迭代器]]></category>

		<guid isPermaLink="false">http://mifunny.info/iterator-of-head-first-design-patterns-106.html</guid>
		<description><![CDATA[迭代器模式： 提供一种方法顺序访问一个聚合对象中的各个元素(不必在意其数据结构)，而不是暴露其内部的表示。（适配器？？相似，一个聚合对象，一个连接多个类） 组合模式： 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。（叶子节点、组合节点！有点头晕，回想起当年C++时的无穷指针恐惧症） 设计原则： 一个类应该只有一个引起变化的原因。── 内聚 模式对比: 策略 ── 封装可互换的行为，并使用委托决定使用哪一个; 适配器 ── 改变一个或多个类的接口; 迭代器 ── 提供一个方法来遍历集合，而无须暴露集合的实现; 外观 ── 简化一群类的接口; 组合 ── 客户可以将对象的集合以及个别的对象一视同仁; 观察者 ── 当某个状态改变时，允许一群对象能被通知到; 关于这个东西，实在没理解太多，越是复杂组合越有用……; lightsaber文锋博客上的《深入浅出PHP面向对象与设计模式》、《用星际学习PHP设计模式》写的比较简单和直接，参考。]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >迭代器模式： 提供一种方法顺序访问一个聚合对象中的各个元素(不必在意其数据结构)，而不是暴露其内部的表示。<br />（适配器？？相似，一个聚合对象，一个连接多个类）</p>
<p style="text-indent: 2em" >组合模式： 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。<br />（叶子节点、组合节点！有点头晕，回想起当年C++时的无穷指针恐惧症）</p>
<p style="text-indent: 2em" ><b>设计原则</b>： 一个类应该只有一个引起变化的原因。── 内聚</p>
<p><span id="more-106"></span><br />
模式对比:
<ul style="list-style-type: none;">
<li>	策略	──	封装可互换的行为，并使用委托决定使用哪一个;</li>
<li>	适配器	──	改变一个或多个类的接口;</li>
<li>	迭代器	──	提供一个方法来遍历集合，而无须暴露集合的实现;</li>
<li>	外观	──	简化一群类的接口;</li>
<li>	组合	──	客户可以将对象的集合以及个别的对象一视同仁;</li>
<li>	观察者	──	当某个状态改变时，允许一群对象能被通知到;</li>
</ul>
<p style="text-indent: 2em; color:gray;" >关于这个东西，实在没理解太多，越是复杂组合越有用……; <a href="http://www.phpchina.com/13268/spacelist_type_blog_itemtypeid_853.html" alt="lightsaber 文锋 php 设计模式">lightsaber文锋</a>博客上的《深入浅出PHP面向对象与设计模式》、《用星际学习PHP设计模式》写的比较简单和直接，参考。</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/iterator-of-head-first-design-patterns-106.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第八课 模板方法</title>
		<link>http://mifunny.info/template-of-head-first-design-patterns-104.html</link>
		<comments>http://mifunny.info/template-of-head-first-design-patterns-104.html#comments</comments>
		<pubDate>Mon, 08 Sep 2008 05:34:14 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[模板]]></category>

		<guid isPermaLink="false">http://mifunny.info/template-of-head-first-design-patterns-104.html</guid>
		<description><![CDATA[模板方法模式： 在一个方法中定义一个算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。（使用方法把算法定义成一组步骤，让后让子类实现步骤）hook(钩子)： 在超类中默认不做任何事，子类可以视情况决定是不是覆盖他们。[当子类 '必须' 提供算法中某个方法和步骤的实现时，使用抽象方法。 如果算法的这个部分是可选的，就使用钩子。] OO 设计原则好莱坞原则： 别调用(打电话给)我们{高层组件}，我们会调用(打电话给)你{低层组件}。(将决策权交给高层模块) 模板很常用，记得学《面向对象》那门课时，举的例子大部分就是模板方法; hook的概念也常听说甚至使用过，如今终于明了; 看看几个设计模式的区别： 模板模式 ── 子类决定如何实现算法中的某些步骤; 策略 ── 封装可互换的行为，然后使用委托来决定要采用哪一个行为; 工厂方法 ── 由子类决定实例化那个具体类;]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >模板方法模式： 在一个方法中定义一个算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。（使用方法把算法定义成一组步骤，让后让子类实现步骤）<br /><b>hook</b>(钩子)： 在超类中默认不做任何事，子类可以视情况决定是不是覆盖他们。<br />[当子类 '必须' 提供算法中某个方法和步骤的实现时，使用抽象方法。 如果算法的这个部分是可选的，就使用钩子。]</p>
<p style="text-indent: 2em" ><strong>OO 设计原则</strong><br />好莱坞原则： 别调用(打电话给)我们{高层组件}，我们会调用(打电话给)你{低层组件}。(将决策权交给高层模块)</p>
<p style="text-indent: 2em; color:gray;" >模板很常用，记得学《面向对象》那门课时，举的例子大部分就是模板方法; hook的概念也常听说甚至使用过，如今终于明了; 看看几个设计模式的区别：</p>
<ul style="list-style-type: none">
<li>模板模式 ── 子类决定如何实现算法中的某些步骤;</li>
<li>策略 ── 封装可互换的行为，然后使用委托来决定要采用哪一个行为;</li>
<li>工厂方法 ── 由子类决定实例化那个具体类;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/template-of-head-first-design-patterns-104.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Head First 设计模式: 第七课 适配器</title>
		<link>http://mifunny.info/adapter-of-head-first-design-patterns-103.html</link>
		<comments>http://mifunny.info/adapter-of-head-first-design-patterns-103.html#comments</comments>
		<pubDate>Fri, 05 Sep 2008 15:59:14 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[设计模式]]></category>
		<category><![CDATA[adapter]]></category>
		<category><![CDATA[外观]]></category>
		<category><![CDATA[适配器]]></category>

		<guid isPermaLink="false">http://mifunny.info/adapter-of-head-first-design-patterns-103.html</guid>
		<description><![CDATA[适配器模式： 将一个类的接口，转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。 适配器模式过程（客户无须知道被适配者接口是什么，而被适配者接口无须修改）： 客户通过目标接口调用适配器的方法对适配器发出请求; 适配器使用被适配者接口把请求转换成被失陪者的一个或多个调用接口; 客户接受收到调用的结果，但并未察觉这一切是适配器在起转换作用。 写在适配器之后： 适配器就由于并口转串口线，听起来很牛X，实际上辛辛苦苦只有自己知道。 在取舍之间，适配器连接不同接口之间。书中实例，老母鸡装土鸭，鸳鸯披上公鸡外衣。不同于装饰者，适配器负责转换，而不是继承。 外观模式： 提供了一个统一的接口，用来访问子系统中的一群接口。外观定义了一个高层接口，让子系统更容易使用。 写在外观模式之后： 外观用于简化接口，连接动作。 也许比较像刚学程序时写的main函数，把动作一股脑儿堆一起; 好吧，外观到底是xx模式，它封装了其他接口，并保留原有的类动作，使用这个模式和C++中的模板一样 ── 方便。 设计原则最少知识原则：只和你的密友谈话。 装饰者 ── 不改变接口，但加入责任。 适配器 ── 将一个接口转换成另一个接口。 外观 ── 让接口更简单。 后话： 所有模式都需要折衷，在抽象和速度之间的取舍，在空间和时间之间平衡…… 设计模式并不能使开发者写的代码执行效率更高，就有如写小程序时面向对象和过程的区别。 在FleaPHP论坛上也见到有人谈到，使用MVC模式的FLEA开发的系统比直接开发的系统承受并发的能力更低; 也有谈到新一代的QeePHP框架的效率。但有件事是不能否认的，设计模式使开发者更快速的开发，更友好的维护，至于效率，在折中之时也考验着开发者经验和能力。难道还因为Java比C效率第而放弃使用Java吗？]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >适配器模式： 将一个类的接口，转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。</p>
<p>适配器模式过程（客户无须知道被适配者接口是什么，而被适配者接口无须修改）：
<ol style="list-style-type: decimal">
<li>客户通过目标接口调用适配器的方法对适配器发出请求; </li>
<li>适配器使用被适配者接口把请求转换成被失陪者的一个或多个调用接口;</li>
<li>客户接受收到调用的结果，但并未察觉这一切是适配器在起转换作用。</li>
</ol>
<p style="text-indent: 2em; color:gray;" >写在<b>适配器</b>之后： 适配器就由于并口转串口线，听起来很牛X，实际上辛辛苦苦只有自己知道。 在取舍之间，适配器连接不同接口之间。书中实例，老母鸡装土鸭，鸳鸯披上公鸡外衣。不同于<b>装饰者</b>，适配器负责转换，而不是继承。</p>
<p><span id="more-103"></span></p>
<p style="text-indent: 2em" >外观模式： 提供了一个统一的接口，用来访问子系统中的一群接口。外观定义了一个高层接口，让子系统更容易使用。</p>
<p style="text-indent: 2em; color:gray;" >写在<b>外观模式</b>之后： 外观用于简化接口，连接动作。 也许比较像刚学程序时写的main函数，把动作一股脑儿堆一起; 好吧，外观到底是xx模式，它封装了其他接口，并保留原有的类动作，使用这个模式和C++中的模板一样 ── 方便。</p>
<p style="text-indent: 2em" ><strong>设计原则</strong><br />最少知识原则：只和你的密友谈话。</p>
<ul style="list-style-type: none;">
<li>装饰者 ── 不改变接口，但加入责任。</li>
<li>适配器 ── 将一个接口转换成另一个接口。</li>
<li>外观 ── 让接口更简单。</li>
</ul>
<p style="text-indent: 2em; color:gray;" >后话： 所有模式都需要折衷，在抽象和速度之间的取舍，在空间和时间之间平衡…… 设计模式并不能使开发者写的代码执行效率更高，就有如写小程序时面向对象和过程的区别。 在FleaPHP论坛上也见到有人谈到，使用MVC模式的FLEA开发的系统比直接开发的系统承受并发的能力更低; 也有谈到新一代的QeePHP框架的效率。但有件事是不能否认的，设计模式使开发者更快速的开发，更友好的维护，至于效率，在折中之时也考验着开发者经验和能力。<i>难道还因为Java比C效率第而放弃使用Java吗？</i></p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/adapter-of-head-first-design-patterns-103.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

