»¶ÓÄú·ÃÎÊÎÒ°®IT¼¼ÊõÍø£¬½ñÌìС±àΪÄã·ÖÏíµÄ±à³Ì¼¼ÊõÊÇ£º¡¾¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÆßÕ ²ßÂÔģʽ¡¿£¬ÏÂÃæÊÇÏêϸµÄ·ÖÏí£¡
¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÆßÕ ²ßÂÔģʽ
ÔÚ±àÐ´ÃæÏò¶ÔÏóµÄ´úÂëµÄʱ£¬ÓÐЩʱºòÄãÐèÒªÒ»¸öÄܹ»×Ô¼º¸ù¾Ý²»Í¬µÄÌõ¼þÀ´ÒýÈ벻ͬµÄ²Ù×÷¶ÔÏóʵÀý¡£ÀýÈ磬һ¸ö²Ëµ¥¹¦ÄÜÄܹ»¸ù¾ÝÓû§µÄ“Ƥ·ô”Ê×Ñ¡ÏîÀ´¾ö¶¨ÊÇ·ñ²ÉÓÃˮƽµÄ»¹ÊÇ´¹Ö±µÄÅÅÁÐÐÎʽ£¬»òÕßÒ»¸ö¼Æ·Ñϵͳ¿ÉÒÔ×ÔÐиù¾ÝÓû§µÄÊÕ»õµØÖ·À´¾ö¶¨Ë°ÂÊ¡£
Ò»°ãÀ´½²£¬Ò»¸ö¿ØÖƲ˵¥µÄ¶ÔÏóʵÀý°üÀ¨ÁËadd(), delete(), ºÍ replace()µÈ²Ëµ¥ÔªËØ£»²¢Í¨¹ýset()½øÐÐÅäÖã¬ÓÃrender()À´¹ÜÀíÏÔʾģʽ¡£ÎÞÂÛÄãÏëÉú³ÉʲôÑù×ӵIJ˵¥£¬Äã¶¼¿ÉÒÔÓÃͬһ¸ö¶ÔÏóÀàÀ´´¦Àí¡£²»Í¬²Ëµ¥µÄ¶ÔÏóʵÀýÖ»ÊÇһЩ·½Ê½º¯ÊýµÄÔËËã¹æÔò²»Í¬°ÕÁË£¬ÖÁÉÙÔڸղŵÄÀý×ÓÀïÃærender()º¯ÊýÊDz»Í¬µÄ¡£
µ«ÊÇÈç¹ûÄãÐèÒªÔö¼Ó²Ëµ¥µÄÏÔʾģʽÖÖÀ࣬»òÕßÄãÐèÒª¸ù¾ÝÓû§µÄ¹ú¼Ò¡¢Ê¡·ÝµÈÐÅÏ¢À´Åжϲ˵¥ÅÅÁеÄ˳ÐòµÄʱºò£¬¸ÃÔõô×öÄØ£¿¶øÇÒÈç¹ûÓÐÐí¶àµÄ·½Ê½º¯Êý¶¼ÊǾ³£±ä»¯µÄ£¬ÄÇô¼òµ¥µÄÀà·â×°½«±äµÃ¸´ÔÓ¡¢ÄÑÒ×Àí½âºÍÉý¼¶µÄ¡£
ÎÊÌâ
ÔõôÇáËɵظıä¶ÔÏóʵÀýµÄÖ´Ðйý³Ì£¬Òò¶øÔÚ´úÂëÖ´ÐеÄʱºò¶¯Ì¬µØ¸Ä±äÖ´Ðйý³Ì£¿Ò»µ©ÊµÏÖÁËÕâ¸ö¹¦ÄÜ£¬Èç¹ûÈ¥±àдÕâÑùµÄÀඨÒå´Ó¶øÈÃά»¤ºÍÉý¼¶±äµÃ·Ç³£¼òµ¥ÄØ£¿
½â¾ö°ì·¨
µ±Ò»¸öÀà·â×°Á˶à¸ö²Ù×÷µÄʱºò£¬¶ÔÏóʵÀý¿ÉÒÔ¶¯Ì¬µØÑ¡ÔñÕâЩ²Ù×÷À´½øÐУ¬¿ÉÒÔÓòßÂÔģʽÀ´°Ñ¶ÔÏó±¾ÉíºÍÔËËã¹æÔòÇø·Ö¿ªÀ´¡£»òÕߣ¬¸ü¼òµ¥µÄ´¦ÀíÊÇÀàÀïÃæ¶¨ÒåµÄ·½Ê½º¯ÊýÓÃcaseÓï¾äÀ´½øÐпØÖÆ¡£µ±È»¸ü¼òµ¥µÄ·½·¨ÊÇʹÓòßÂÔģʽ¡£
²ßÂÔģʽ¹¦Äܷdz£Ç¿´ó£¬ÒòΪÕâ¸öÉè¼ÆÄ£Ê½±¾ÉíµÄºËÐÄ˼Ïë¾ÍÊÇÃæÏò¶ÔÏó±à³ÌµÄ¶àÐÎÐÔµÄ˼Ïë¡£
¾ÍÔÚ±à³ÌÁìÓòÖ®Í⣬ÓÐÐí¶àÀý×ÓÊǹØÓÚ²ßÂÔģʽµÄ¡£Èç¹ûÎÒÐèÒªÔÚÇ峿´Ó¼ÒÀïÈ¥Éϰ࣬ÎÒ¿ÉÒÔÓм¸¸ö²ßÂÔ¿ÉÒÔ¿¼ÂÇ£ºÎÒ¿ÉÒÔ¿ª³µ£¬³Ë×ø¹«½»³µ£¬×ß·£¬Æû³µ»òÕßÉõÖÁÊÇ´î³ËÖ±Éý·É»ú¡£Ã¿¸ö²ßÂÔ¶¼¿ÉÒԵõ½ÏàͬµÄ½á¹û£¬µ«ÊÇËüÃÇʹÓÃÁ˲»Í¬µÄ×ÊÔ´¡£Ñ¡Ôñ²ßÂÔµÄÒÀ¾ÝÊÇ·ÑÓã¬Ê±¼ä£¬Ê¹Óù¤¾ß»¹ÓÐÿÖÖ·½Ê½µÄ·½±ã³Ì¶È ¡£Ò»¸öºÜºÃµÄ²ßÂÔÒ²ÐíÔÚµÚ¶þÌì¾Í²»ÄÜÔÙ±»Ê¹Óõģ¬ËùÒÔ²ßÂÔµÄÑ¡ÔñÊÇÏà¶ÔµÄ¡£
ÄãÒѾÔÚÇ°ÃæµÄ¹¤³§Ä£Ê½Õ½ڿ´µ½Á˺ͲßÂÔģʽÏàËÆµÄÀý×Ó:ÒòΪ²»Í¬ÌØÐԵķÑÓüÆË㷽ʽ²»Í¬£¬ËùÒÔMonopolyÓÎÏ·µÄ¿ò¼ÜʹÓÃÁËÐí¶àÏàËÆµÄÌØÐÔÀ࣬µ«ÊÇÒòΪ·ÑÓõļÆËã²»ÊÇ´ÓÀà±¾Éí»ñµÃ£¬ËùÒÔÕâ¸ö·ÑÓüÆËãÏà¶ÔÀ´ËµÊÇÒ»¸öTemplateMethod Éè¼ÆÄ£Ê½¡£
Àý×Ó
¾ÙÀý×Ó˵Ã÷£¬ÈÃÎÒÃÇ×öÒ»¸ö´æ´¢PHP²ÎÊýµÄcache¡£Õâ¸öcahceÀàÐèÒª°Ñ±äÁ¿ÒÔPHPʶ±ðµÄ·½Ê½Ð´Èëµ½Ò»¸öÎļþµ±ÖУ¬ËùÒÔÄã¿ÉÒÔÔÚÒÔºó¼ÓÔØ¸ÃÎļþ²¢Ê¹ÓÃËü¡£Õâ¸öÀ໹Ӧ¸Ã¿ÉÒÔÈÃÄãΪÿ¸öÊý¾Ý¼Ó¸ö±êʶ·ûºÍ´æ´¢µÄ·½Ê½¡£
Êý¾Ý»º´æ
×¢£º»º´æÊÇΪÁËÔÚ½ÓÏÂÀ´µÄ²Ù×÷ÖмÌÐøÊ¹Óöø¶Ô×ÊÔ´½øÐлº´æ¡£Äã¿ÉÒÔͨ¹ý½¨Á¢ºÍʹÓûº´æÀ´½Úʡֱ½Ó´ÓÔÊý¾Ý¿â»ñÈ¡Êý¾ÝµÄʱ¼ä¡£Õâ·½ÃæµÄÀý×Ó×î³£¼ûµÄ¾ÍÊÇ·ÃÎÊÊý¾Ý¿â»òÕß½âÎö´óµÄXMLÎĵµ£¬»òÕß´óµÄÅäÖÃÎļþ¡£
»º´æÒ²»á³öÏÖÒ»¸öÎÊÌ⣺ÄãµÄ»º´æ¿ÉÄÜ»áʧȥÓëÔÊý¾ÝµÄͬ²½¡£»òÕß»º´æÐèҪʹÓÃÌ«¶àÄÚ´æ¡£
×ʼ£¬ÎÒÃÇ¿ª·¢Ò»¸ö»º´æ²Ù×÷£¬²¢²»Ê¹ÓòßÂÔģʽ¡£
ÒòΪÄã¿ÉÄÜÐèÒª»º´æµÄ²»Ö¹Ò»¸öÖµ£¬ËùÒÔÄãÐèҪʹÓñêʶ·ûÀ´±êʶ³öÄãÐèÒªÖ¸¶¨µÄÔªËØ¡£ÔÚÕâ¸öÀý×ÓÖУ¬±êʶ·û¾ÍÊÇ’application_config’¡£ÏÂÃæÊÔÒ»¸öÈç¹ûʹÓÃcacheµÄÀý×Ó¡£
| // PHP4 $config_cache =& new VarCache(‘application_config’); if ($config_cache->isValid()) { $config = $config_cache->get(); } else { $config = slow_expensive_function_to_get_config(); $config_cache->set($config); } |
Õâ¸ö´úÂëÉú³ÉÁËÒ»¸öеÄVarCache¶ÔÏó´æ·ÅÔÚ$config_cache±äÁ¿ÀïÃæ¡£Õâ¸öÊý¾ÝÔÚ»º´æÖеıêʶ·ûÊÇ ‘application_config’¡£Èç¹ûÔÚ»º´æÀïÃæÓÐÕâ¸öÊý¾Ý£¬ isValid() ½«·µ»ØÕ棨 true £©²¢ÇÒ»ñÈ¡»º´æÖеÄÊý¾Ý¡£·´Ö®£¬Öµ±»ÖØÐ»ñÈ¡²¢Ð´È뻺´æµ±ÖУ¬ÒÔ±ãÏ´ÎʹÓá£
°´ÕÕÒ»°ãµÄÐèÇó£¬ÈÃÎÒÃÇ¿ªÊ¼±àдÕâ¶Î´úÂëÀ´½øÐвâÊÔ¡£Ê×ÏÈ£¬Èç¹û»º´æÖÐûÓиÃÊý¾Ý£¬ isValid() ·½Ê½º¯ÊýÓ¦¸Ã·µ»Ø·ÇÖµ(false)¡£
| class VarCacheTestCase extends UnitTestCase { function TestUnsetValueIsInvalid() { $cache =& new VarCache(‘foo’); $this->assertFalse($cache->isValid()); } |
ÒòΪVarCacheÏÖÔÚûÓдúÂ룬ËùÒÔ×î¼òµ¥µÄ·½Ê½¾ÍÊÇÏȹ¹ÔìÒ»¸ö·½Ê½º¯Êý¡£
| class VarCache { function isValid() {} } |
ÕâÑù£¬ÎÒÃǾͿÉÒÔ¼ÌÐøÁË¡£
| class VarCacheTestCase extends UnitTestCase { function TestUnsetValueIsInvalid() { } function TestIsValidTrueAfterSet() { $cache =& new VarCache(‘foo’); $cache->set(‘bar’); $this->assertTrue($cache->isValid()); } |
ÉÏÃæµÄ²âÊÔУÑéÁË»º´æµÄÊý¾ÝÊÇ·ñÊÇ¿ÉÓõġ£
¿ªÊ¼±àдcacheÀàµÄÖ÷Òª²¿·Ö¡£VarCache ÒýÈëÒ»¸ö±êʶ·û, ËùÒÔconstructorÁËÒ»¸öÓ¦¸Ã¼Ç¼ËüµÄ¶ÔÏóʵÀý¡£ÕâÀïÃæ»¹ÓÐÒ»¸öset£¨£©µÄ·½Ê½º¯Êý£¬ÓÃÀ´°ÑÊý¾Ý´æÈ뻺´æ£¬»òÕßµ±Êý¾Ý´æÔÚʱ£¬Ð޸Ļº´æµ±ÖеÄÊý¾Ý¡£
|
class VarCache { |
¶ÔÏóʵÀýµÄ²ÎÊý$_name ´æ·ÅÁË»º´æµÄ±êʶ·û¡£ÔÚÕâ¸ö¼òµ¥µÄ²Ù×÷ÖУ¬ $_name ±»ÓÃÀ´Éú³ÉÎļþÃû(ÔÚʵ¼ÊµÄʹÓÿÉÄÜ»áÊý¾Ý¿â»òÕ߯äËüµÄÊý¾ÝÔ´´úÌæ) set() ʹÓà fopen() ºÍ fclose() À´ “·ÃÎÊ” »ùÓÚ$_nameµÄÎļþ¡£µ±µ÷ÓÃset()ºó, file_exists()ÔÚVarCache::isValid()ÀïÃæµ÷Ó÷µ»ØÕ棨true£©¡£
ÔËÐÐÕâ¸ö²âÊÔÀ´²úÉúÒ»¸öÎÒÃÇÔ¤ÆÚµÄ½á¹û£»µ«ÊÇʵ¼ÊÇé¿öÊDZ¨´í£¡ÎªÊ²Ã´ÄØ£¿µÚÒ»´ÎÔËеÄʱºòûÓÐÉú³ÉÎļþ£¬ËùÒÔµÚ¶þ´ÎÔËÐеÄʱºòÕÒ²»µ½Îļþ£¬ÏÔÈ»ÎÒÃDz»Ï£ÍûÕâÖÖÇé¿ö³öÏÖ¡£ÎÒÃÇÆÚÍûµÄÊÇÿһ´ÎÔËÐдúÂë¶¼ÊÇ»¥²»Ó°ÏìµÄ¡£
ÐÒÔ˵ÄÊÇ£¬°Ñ×ÜÌå²âÊÔ¿ò¼ÜºÍÌØ¶¨¹¦Äܵļòµ¥²âÊÔ½áºÏÆðÀ´£¬ÎÒÃǾͿÉÒԵõ½Áé»îµÄ²âÊÔ»·¾³£¬²¢ÇÒÔÚÒÔºóµÄ²âÊÔÖз½±ãµØÊ¹Óá£UnitTestCase::setUp()ʵÏÖ¿ò¼ÜµÄ³õʼ»¯£¬¶øUnitTestCase::tearDown()ʵÏÖ¾ßÌåµÄ²âÊÔ¹ý³Ì¡£
°ÑÒ»ÏÂÕâ¶Î´úÂë¼ÓÈëµ½²âÊÔ»·¾³ÖÐÒÔºó£¬Äã¿ÉÒÔÈ·±£Ã¿Ò»¸ö²âÊÔ¹ý³Ì´Ó¿ªÊ¼µÄʱºò¾Í¸÷×Ô¶ÀÁ¢µØÔËÐУº
| The Strategy Pattern 127 class VarCacheTestCase extends UnitTestCase { function setup() { @unlink(‘cache/foo.php’); } // ... } |
ÏÖÔÚ»º´æµÄÎļþÔÚÿһ´Î²âÊÔÖ´ÐÐ֮ǰ¶¼Ã»É¾³ýµôÁË£¬Õâ±£Ö¤ÁËÿһ´Î²âÊÔÔËÐж¼ÊÇÏ໥¶ÀÁ¢µÄ¡££¨²âÊÔÇý¶¯µÄ¿ª·¢¸üʵÓõķ½·¨ÊÇÄã¿ÉÒÔдһ¸öVarCache::clear()·½Ê½º¯ÊýÈ¥´¦ÀíÒ»¸ö»º´æµÄ²ÎÊýµÄÇå³ý¹¤×÷¡££©
µ±ÉÏÒ»´Î´úÂëÖ´ÐгöÀ´µÄ»º´æ½á¹û±»Çå³ýÁË£¬²âÊÔÖØÐ¿ªÊ¼ÔËÐУ¬ÕâÒâζ×ÅÄã¿ÉÒÔ¼ÌÐø²âÊÔ²¢±àдеĴúÂë¡£
| class VarCacheTestCase extends UnitTestCase { function setup() { } function TestUnsetValueIsInvalid() { } function TestIsValidTrueAfterSet() { } function TestCacheRetainsValue() { $test_val = ‘test’.rand(1,100); $cache =& new VarCache(‘foo’); $cache->set($test_val); $this->assertEqual($test_val, $cache->get()); } |
ÉÏÃæµÄ²âÊÔÑéÖ¤VarCache::get()·µ»ØµÄÖµÊÇ·ñÓëÓÃVarCache::set()ÉèÖõÄÏàͬ¡£
|
class VarCache { |
ͨ¹ýºÚÌå×Ö²¿·ÖµÄ´úÂ룬VarCache::set() ·½Ê½º¯Êý°Ñ²ÎÊý$valueµÄÄÚÈÝдµ½ÎļþÖУ¬²¢ÓÃVarCache::get() ·½Ê½º¯Êýͨ¹ýfile_get_content() ´ÓÎļþÖаÑÄÚÈݶÁÈ¡³öÀ´.
´ÓĿǰµÄÖ´ÐÐÇé¿öÀ´¿´£¬¶ÔÓÚ×Ö·û´®ºÍÊý×ֵIJÙ×÷ÊÇûÓÐÎÊÌâµÄ£¬µ«ÊǶÔÓÚ¸ü¸´ÔӵIJÎÊý±ÈÈçÊý×éºÍ¶ÔÏó£¬Ö´ÐÐÆðÀ´¾Í»á³öÏÖÎÊÌâÁË¡£ÎÒÃÇÓÃÏÂÃæµÄ´úÂë½øÐд¦Àí£º
| class VarCacheTestCase extends UnitTestCase { // ... function TestStringFailsForArray() { $test_val = array(‘one’,’two’); $cache =& new VarCache(‘foo’); $cache->set($test_val); $this->assertError(‘Array to string conversion’); $this->assertNotEqual($test_val, $cache->get()); $this->assertEqual(‘array’,strtolower($cache->get())); } |
ÓÉÓÚÆª·ùµÄ¹ØÏµ£¬ÎÒÃÇÖ±½Óµ÷µ½Õâ¸öÖ´Ðйý³ÌµÄ½áÊø²¿·Ö£¬ËüËæºóÒ²½«ÊµÏÖ²ßÂÔʽµÄÅжϡ£
ÕâÀï¾ÍÊÇÔö¼ÓһϵÁвÙ×÷ÓÃÀ´ÍêÉÆVarCacheµÄµØ·½¡£
| class VarCache { //... function get() { if ($this->isValid()) { include $this->_name.’.php’; return $cached_content; } //... } |
ÔÚÕâÀï¹Ø¼üÐԵĸıäÊÇget() ·½Ê½º¯Êý(²¢ÇÒÈÃPHPÈ¥ÑéÖ¤ÓÐЧÐÔ¡£
ͬʱ£¬get()·µ»Ø²ÎÊý$cached_contentµÄÖµ,ËùÒÔÎÞÂÛset() Èç¹û²Ù×÷£¬Ëü±ØÐëÉèÖÃÕâ¸ö±äÁ¿!
Òò´Ë£¬¶ÔÓÚÊý×ÖÀ´Ëµ£¬Ö´ÐгöÀ´ÊÇʲôÑùµÄ½á¹ûÄØ£¿
| class VarCache { //... function set($value) { $file_handle = fopen($this->_name.’.php’, ‘w’); $template = ‘<?php $cached_content = %s;’; $content = sprintf($template The Strategy Pattern 129 ,(float)$value); fwrite($file_handle, $content); fclose($file_handle); } } |
¿´ÆðÀ´¶ÔÓÚÒ»¸öÊý×Ö£¬Ö´ÐÐÆðÀ´ÊÇûÓÐÎÊÌâµÄ£¬ÄÇô¶ÔÓÚ×Ö·û´®ÈçºÎÄØ£¿¶ÔÓÚ×Ö·û´®£¬»º´æÎļþµÄÊý¾Ý±àд·½Ê½¾Í±ØÐëÓÃ= ‘%s’;½áβ¶ø²»ÊÇ= %s;¡£ËùÒÔÔÚÕâÀïÎÒÃÇÐèÒªÒýÈëÒ»¸ö“type” ²ÎÊý£ºËüÓÃÀ´Ö¸¶¨»º´æµÄÊý¾ÝÀàÐÍÊÇÒ»¸öÕûÐÍ»¹ÊÇ×Ö·û´®¡£ÎªÁ˸üÈÝÒ×µØÔö¼Ó¸ü¶àµÄÊý¾ÝÀàÐÍ£¬ÎÒÃÇ·Ö±ðÔÚset()ºÍ_getTemplate()º¯ÊýÔö¼ÓÒ»¸öcase Åжϡ£
| class VarCache { var $_name; var $_type; function VarCache($name, $type=’string’) { $this->_name = ‘cache/’.$name; $this->_type = $type; } // ... function _getTemplate() { $template = ‘<?php $cached_content = ‘; switch ($this->_type) { case ‘string’: $template .= “‘%s’;”; break; case ‘numeric’: $template .= ‘%s;’; break; default: trigger_error(‘invalid cache type’); } return $template; } function set($value) { $file_handle = fopen($this->_name.’.php’, ‘w’); switch ($this->_type) { case ‘string’: $content = sprintf($this->_getTemplate() ,str_replace(“‘“,”\\’”,$value)); break; case ‘numeric’: $content = sprintf($this->_getTemplate() ,(float)$value); break; default: trigger_error(‘invalid cache type’); } fwrite($file_handle, $content); fclose($file_handle); } } |
ÏÖÔÚ£¬¹¹Ô캯ÊýÔö¼ÓÁ˵ڶþ¸ö¿ÉÑ¡µÄ²ÎÊýÓÃÀ´È·¶¨µÚÒ»¸ö²ÎÊýµÄÊý¾ÝÀàÐÍÊÇÊý×ÖÀàÐÍ»¹ÊÇ×Ö·û´®¡£Õâ¸öÀàµÄ×îÖÕÐÎʽ±äΪÇë¿´ÏÂÃæ´úÂ룬°üÀ¨ÁËÒ»¸ö‘serialize’ ÓÃÀ´´æ´¢Êý¾Ý¡¢¶ÔÏóµÈ¸´ÔÓÊý¾ÝµÄ´æ´¢ÀàÐÍ¡£
| class VarCache { var $_name; var $_type; function VarCache($name, $type=’serialize’) { $this->_name = ‘cache/’.$name; $this->_type = $type; } function isValid() { return file_exists($this->_name.’.php’); } function get() { if ($this->isValid()) { include $this->_name.’.php’ return $cached_content; } } function _getTemplate() { $template = ‘<?php $cached_content = ‘; switch ($this->_type) { case ‘string’: $template .= “‘%s’;”; break; case ‘serialize’: $template .= “unserialize(stripslashes(‘%s’));”; break; case ‘numeric’: $template .= ‘%s;’; break; default: trigger_error(‘invalid cache type’); } return $template; } function set($value) { $file_handle = fopen($this->_name.’.php’, ‘w’); switch ($this->_type) { case ‘string’: $content = sprintf($this->_getTemplate() ,str_replace(“‘“,”\\’”,$value)); break; case ‘serialize’: $content = sprintf($this->_getTemplate() ,addslashes(serialize($value))); break; case ‘numeric’: $content = sprintf($this->_getTemplate() ,(float)$value); break; default: trigger_error(‘invalid cache type’); } fwrite($file_handle, $content); The Strategy Pattern 131 fclose($file_handle); } } |
Çë×¢Òâ_getTemplate()ºÍset() º¯ÊýÖеÄcaseÅжÏÓï¾ä¡£ËüÃǶ¼ÊÇ»ùÓÚͬһ¸ö$_type ʵÀý²ÎÊýµÄ¡£get() º¯ÊýÖÐȴûÓÐÊܵ½$_typeµÄÓ°Ï죬ËùÒÔ¿´ÆðÀ´ÒòΪ´æ´¢µÄÊý¾ÝÀàÐ͵ı仯ֻӰÏìµ½Êý¾ÝµÄ´æ´¢¹ý³Ì¡£Í¬Ê±£¬¶àÖØµÄcaseÌõ¼þÅжÏÒ²ÊÇÒ»¸öÌáʾ£¬Õâ¸öµØ·½Èç¹ûʹÓÃÁ˲ßÂÔµÄÉè¼ÆÄ£Ê½»á¸üºÃ¡£
Ñù±¾´úÂë
´ÓÒ»¸ö¶àÖØµÄswitch Ìõ¼þÅжϸı䵽²ßÂÔģʽÊÇÒ»¸öÌõ¼þ·Ö½âʵÀýµÄ¾µäÀý×Ó¡£Õû¸ö²âÊԵĻ·¾³Ã»Óб仯£»Ö»ÊÇVarCacheÀàµÄÄÚ²¿¸Ä±äÁË¡£
Ê×ÏÈÎÒÃǰÑÄãÏëÒª·â×°ÔÚÒ»¸ö¶ÀÁ¢µÄÀàµÄ¸÷ÖÖÇé¿ö·Ö¸ô³öÀ´¡£¾ÍÇ°ÃæµÄÀý×ÓÀ´Ëµ£¬ÄãÓÐÈýÖֱ仯µÄÇé¿öÐèÒª½øÐп¼ÂÇ:‘string’, ‘numeric’, ºÍµÚÈý¸ö‘serialize’¡£Ç°ÃæµÄÀý×ÓÖл¹ÔÚ¶ÔÏóʵÀý»¯µÄʱºòÑ¡ÔñÁËÊý¾ÝÊä³öµÄ¸ñʽ¡£»ùÓÚÕâ¸öÔËËã·¨Ôò£¬ÄãÐèÒª´´½¨Ò»¸öAPIÀ´·â×°Ëü¡£
Äã¿ÉÒÔÓÃÒÔϵĴúÂ뿪ʼ£º
| class CacheWriter { function store($file_handle, $var) { die(‘abstract class-implement in concrete CacheWriter’); } } |
Õâ¸ö¾ÍÊÇPHP4°æ±¾µÄ½Ó¿Ú¡£(Äã¿ÉÒÔ´ÓÕâ¸öÀà½øÐм̳ÐÀ´±£Ö¤ÄãʹÓõÄÊÇ×ÓÀ࣬ÕâÑù×öµÄ»°Ö»ÊÇÔö¼ÓÁËһЩϵͳµÄ¸ºÔØ¡£ÓÈÆäÔÚ»ùÀàCacheWriterÊÇÔÚÁíÍâÒ»¸öÎļþ¶¨ÒåµÄʱºò¡£¸ºÔØÔö¼ÓµÃÉÔ΢¶àһЩ¡£)
»ùÀàCacheWriter µ÷ÓÃÁËstore() ·½Ê½º¯ÊýÀ´ÒýÈëÎļþ´¦Àí×ÊÔ´ºÍ²ÎÊýÀ´½øÐд洢¡£Ã¿Ò»¸öʵ¼ÊµÄÀà¶¼´ÓÖ´ÐÐstore()º¯Êý, µ«ÊDz»Í¬µÄʵÀýÔÚstore()º¯ÊýÀïÃæÊ¹ÓõÄÔËËã·¨ÔòÊDz»Ò»ÑùµÄ£¬ÒԱ㲻ͬµÄÊý¾ÝÀàÐÍÉú³ÉµÄ$cached_contentÊDz»Í¬µÄ¡£Ã¿Ò»¸öÔËËã·¨Ôò±»µ±×÷Ò»¸öµ¥¶ÀµÄÀàÀ´ÔËÐС£
Ç°ÃæµÄÀý×ÓÖеĴúÂë±»Ìæ»»Îª£º
|
class VarCache { |
set() ·½Ê½º¯Êýµ½Ïà¶ÔÓ¦µÄÀ൱ÖС£ÕâÀïÊÇStringCacheWriter:
| class StringCacheWriter { function store($file_handle, $string) { $content = sprintf( “<?php\n\$cached_content = ‘%s’;” ,str_replace(“‘“,”\\’”,$string)); fwrite($file_handle, $contents); } } |
(ÒòΪPHP 4²»Ö§³Ö½Ó¿ÚµÄʹÓã¬ÕâÀï½Ó¿ÚÖ»ÊÇÓÃ×¢ÊÍÀ´¼òµ¥ÃèÊöһϡ£)
ÕâÀïÎÒÃǵõ½ÁíÍâÒ»¸öÔËËã·¨Ôò´æ´¢“²ßÂÔ”¡£
| class NumericCacheWriter { function store($file_handle, $numeric) { $content = sprintf(“<?php\n\$cached_content = %s;” ,(double)$numeric); The Strategy Pattern 133 fwrite($file_handle, $content); } } class SerializingCacheWriter { function store($file_handle, $var) { $content = sprintf( “<?php\n\$cached_content = unserialize(stripslashes(‘%s’));” ,addslashes(serialize($var))); fwrite($file_handle, $content); } } |
ͨ¹ý°ÑÔËËã·¨Ôò·â×°µ½½»»¥µÄÀàÖУ¨Í¬ÑùµÄAPI,¶àÐÎÐÔ£©£¬ÄãÏÖÔÚ¿ÉÒԻعýÍ·À´Í¨¹ý²ßÂÔÉè¼ÆÄ£Ê½ÖØÐÂÖ´ÐÐVarCache()Àà¡£Õâ¸öʱºò¾¹ýÌõ¼þ·Ö½âµ«ÊÇÓëÔÀ´·Ç³£ÀàËÆµÄ´úÂë¿ÉÒÔ¼ÌÐøÔËÐÐÁË¡£
|
class VarCache { |
»º´æÎļþµÄʱºò£¬ÎÒÃǽ«²»ÔÙ¹ØÐijõʼ»¯µÄʱºòÊÇÓÃʲôÔËËã·¨ÔòÀ´´æ´¢Êý¾Ý¡£
ÏÂÃæÃèÊöÁ˶¨Òå²ßÂÔÉè¼ÆÄ£Ê½µÄ¼¸¸öÌØÐÔ£ºÒ»ÏµÁеÄÔËËã·¨Ôò£¬Ã¿¸öÔËËã·¨Ôò¶¼ÊÇ·â×°ÔÚ¶ÀÁ¢µÄÀàÖС£µ«ÊÇ£¬Ã¿Ò»¸ö¶ÔÏó¶¼Êǰ󶨵½Ò»¸ö¹«¹²µÄÈÝÆ÷¶ÔÏóÖС£²¢ÇÒ£¬Í¨¹ýÒ»¸ö¹«¹²µÄAPIʹÓÃͬÑùµÄ·½Ê½ÔÚ½øÐÐÒýÓ᣶øÕâ¸ö¹«¹²µÄAPIµÄÔËÐз½Ê½ÊÇÓë²ßÂÔµÄÑ¡ÔñÎ޹صġ£
ÆÀÂÛ
²ßÂÔÉè¼ÆÄ£Ê½µÄ¹¦ÄÜÊǷdz£Ç¿´óµÄ ¡£±¾Êéµ½ÏÖÔÚΪֹËù˵µÄÆäËüµÄÉè¼ÆÄ£Ê½ÌṩµÄ¶¼ÊÇÓ¦ÓõĻù´¡Ä£¿é¹¦ÄÜ£¬¶ø ²ßÂÔÉè¼ÆÄ£Ê½ÊÇĿǰµÚÒ»¸öÓµÓÐÉè¼ÆÄ£Ê½ºÍÏîÄ¿µÄÇ¨ÒÆÀïÃæ¹Ø¼ü¹¦ÄܵÄÉè¼ÆÄ£Ê½¡£
Ëü¿ÉÒÔÌæ»»µôÒ»¸ö¶ÔÏóÀïÃæ±àд¸´ÔӵIJ¿·Ö£¬¸Ä±äÕû¸ö¶ÔÏóµÄÔËÐкÍÐÔÄÜ£¬Õâµã¹¦ÄÜÊǷdz£Ç¿´óµÄ¡£ÁíÍ⣬һ¸öÌØ¶¨²ßÂÔʹÓÃÒÔºóÂíÉϾͱ»Çå¿ÕÁË£¬Õâ¸öʹµÃʣϵÄAPI·Ç³£ÈÝÒ×Ö´ÐС£´Ó¸ù±¾ÉÏ˵£¬Ñ¡ÓÃÄĸöÔËËã·¨Ôò¶ÔÓÚÆäËüµÄ´úÂëÀ´Ëµ¶¼ÊÇ͸Ã÷µÄ¡£
»¥ÁªÍøÉÏÓÐÕâôһ¸ö˵·¨“±¾ÖÊÉÏ˵£¬ÈκÎÒ»¸öÊÂÇ鿪ʼµÄʱºò¶¼ÏñÔÚʹÓòßÂÔģʽ¡£”ÎªÊ²Ã´ÄØ£¿ÒòΪÕâ¸öÉè¼ÆÄ£Ê½ÓÐЧӦÓÃÁ˶àÐÎÐÔµÄÌØµã£¬¶øÕâ¸öÒ²ÊÇÃæÏò¶ÔÏó±à³Ì×îÇ¿´óµÄ¼¸¸ö·½ÃæÖ®Ò»¡£
Ïà¹ØµÄÉè¼ÆÄ£Ê½
²ßÂÔģʽºÍÆäËüÐí¶àÉè¼ÆÄ£Ê½±È½ÏÆðÀ´ÊǷdz£ÀàËÆµÄ¡£²ßÂÔģʽºÍ״̬ģʽ×î´óµÄÇø±ð¾ÍÊDzßÂÔģʽֻÊǵÄÌõ¼þÑ¡ÔñÖ»Ö´ÐÐÒ»´Î£¬¶ø×´Ì¬Ä£Ê½ÊÇËæ×ÅʵÀý²ÎÊý£¨¶ÔÏóʵÀýµÄ״̬£©µÄ¸Ä±ä²»Í£µØ¸ü¸ÄÖ´ÐÐģʽ¡£»»¾ä»°Ëµ£¬²ßÂÔģʽֻÊÇÔÚ¶ÔÏó³õʼ»¯µÄʱºò¸ü¸ÄÖ´ÐÐģʽ£¬¶ø×´Ì¬Ä£Ê½ÊǸù¾Ý¶ÔÏóʵÀýµÄÖÜÆÚʱ¼ä¶ø¶¯Ì¬µØ¸Ä±ä¶ÔÏóʵÀýµÄÖ´ÐÐģʽ¡£
×¢£º Éè¼ÆÄ£Ê½—״̬
Design Pattern—State
״̬Éè¼ÆÄ£Ê½ÔÊÐíÒ»¸ö¶ÔÏóʵÀýÒòΪһ¸öÄÚ²¿µÄ״̬¸Ä±ä¶ø¸Ä±äÆäÖ´ÐÐģʽ¡£ Òò´Ë£¬¶ÔÏóʵÀý×ÔÉí¿ÉÒÔÓÐЧµØ¸Ä±äÆäÀඨÒå¡£
ÓÍÆá¹¤Éè¼ÆÄ£Ê½(¼ûµÚÊ®¶þÕÂ) ÔÚ¸ÅÄîÉÏÕýºÃºÍ²ßÂÔģʽÊÇÏà·´µÄ¡£½èÓÃGoFµÄÒ»¸öÍÆÂÛ£¬²ßÂÔģʽ¸Ä±äµÄÊÇÒ»¸ö¶ÔÏóʵÀýµÄºËÐĵĸ´ÔÓ²Ù×÷£¬¶øÓÍÆá¹¤Éè¼ÆÄ£Ê½¸Ä±äµÄÊÇÒ»¸ö¶ÔÏóʵÀýµÄƤ·ô¡£
×îºóÒ»¸öÏà¹ØµÄÉè¼ÆÄ£Ê½ÊÇ·ÃÎÊÕßÉè¼ÆÄ£Ê½¡£ÔÚ²ßÂÔģʽÀïÃæ£¬Äã´´½¨Ò»¸öʵ¼ÊµÄÑ¡ÔñµÄ²ßÂԵĶÔÏóʵÀýÈ»ºó°ÑËü°ó¶¨µ½Ò»¸öʵÀý²ÎÊýÖУ»ÔÚ·ÃÎÊÕßģʽÀïÃæ£¬²ßÂÔʹÓòÎÊýµÄ·½Ê½½øÐд«µÝµÄ¡£Äã¿ÉÒÔÏëÏóÏ·ÃÎÊÕßÉè¼ÆÄ£Ê½£¬ËüµÄÉè¼ÆË¼Â·ºÍ²ßÂÔģʽÕýºÃÏà·´¡£
ÒÔÉÏËù·ÖÏíµÄÊǹØÓÚ¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÆßÕ ²ßÂÔģʽ£¬ÏÂÃæÊDZà¼ÎªÄãÍÆ¼öµÄÓмÛÖµµÄÓû§»¥¶¯£º
¡¡¡¡Ïà¹ØÎÊÌ⣺PHPÓÐÄļ¸ÖÖÉè¼ÆÄ£Ê½£¿
¡¡¡¡´ð£ºPHP Ò»°ãÓÐÎåÖÖ³£¼ûµÄÉè¼ÆÄ£Ê½ ¹¤³§Ä£Ê½ ¹¤³§Ä£Ê½ ÊÇÒ»ÖÖÀ࣬Ëü¾ßÓÐΪÄú´´½¨¶ÔÏóµÄijЩ·½·¨¡£Äú¿ÉÒÔʹÓù¤³§Àà´´½¨¶ÔÏ󣬶ø²»Ö±½ÓʹÓà new¡£ÕâÑù£¬Èç¹ûÄúÏëÒª¸ü¸ÄËù´´½¨µÄ¶ÔÏóÀàÐÍ£¬Ö»Ðè¸ü¸Ä¸Ã¹¤³§¼´¿É¡£Ê¹Óøù¤³§µÄËùÓдúÂë»á×Ô¶¯¸ü¸Ä¡£ ÀýÈç... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺PHPµÄµ¥Ì¬Éè¼ÆÄ£Ê½
¡¡¡¡´ð£º¶ÔÓÚjavaת¹ýÀ´³ÌÐòԱ˵Êǵ¥Ì¬Éè¼ÆÄ£Ê½£¬ÔÚPHPÉÏͨ³£ËµÊǵ¥Àýģʽ£¬Ëµ·¨²»Ò»Ñù£¬ÊÖ²áÉÏÒ²ÓнéÉÜ£º µ¥Àýģʽ£¨Singleton£©ÓÃÓÚΪһ¸öÀàÉú³ÉÒ»¸öΨһµÄ¶ÔÏó¡£×î³£Óõĵط½ÊÇÊý¾Ý¿âÁ¬½Ó¡£ ʹÓõ¥ÀýģʽÉú³ÉÒ»¸ö¶ÔÏóºó£¬¸Ã¶ÔÏó¿ÉÒÔ±»ÆäËüÖÚ¶à¶ÔÏóËù... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺³ÌÐòÉè¼ÆÄ£Ê½ÖУ¬Ê²Ã´Çé¿öÓ¦¸ÃÓ¦ÓòßÂÔģʽ£¿
¡¡¡¡´ð£ºe >>Ïêϸ
- ÆÀÂÛÁÐ±í£¨ÍøÓÑÆÀÂÛ½ö¹©ÍøÓѱí´ï¸öÈË¿´·¨£¬²¢²»±íÃ÷±¾Õ¾Í¬ÒâÆä¹Ûµã»ò֤ʵÆäÃèÊö£©
-
