Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Éè¼ÆÄ£Ê½×ܽá(2)
 
À´Ô´£ºcsdn ·¢²¼ÓÚ£º 2017-6-12
  2928  次浏览      31
 

±¾ÎÄÊÇÉè¼ÆÄ£Ê½×ܽáµÄµÚ¶þƪ£ºÖ÷ÒªÏêϸ½²½âÁËÐÐΪÐÍÉè¼ÆÄ£Ê½£¬Ï£Íû¶Ô´ó¼ÒÓÐËù°ïÖú¡£

ÐÐΪÐÍÉè¼ÆÄ£Ê½£º

Chain Of Responsibility Parttert£¨Ö°ÔðÁ´Ä£Ê½£©

Òâͼ

ʹ¶à¸ö¶ÔÏó¶¼Óлú»á´¦ÀíÇëÇ󣬴Ӷø±ÜÃâÇëÇóµÄ·¢ËÍÕߺͽÓÊÕÕßÖ®¼äµÄñîºÏ¹ØÏµ¡£½«ÕâЩ¶ÔÏóÁ¬³ÉÒ»ÌõÁ´£¬²¢ÑØ×ÅÕâÌõÁ´´«µÝ¸ÃÇëÇó£¬Ö±µ½ÓÐÒ»¸ö¶ÔÏó´¦ÀíËüΪֹ¡£

ÊÊÓÃÐÔ

1. Óжà¸öµÄ¶ÔÏó¿ÉÒÔ´¦ÀíÒ»¸öÇëÇó£¬Äĸö¶ÔÏó´¦Àí¸ÃÇëÇóÔËÐÐʱ¿Ì×Ô¶¯È·¶¨¡£

2. ÄãÏëÔÚ²»Ã÷È·Ö¸¶¨½ÓÊÕÕßµÄÇé¿öÏ£¬Ïò¶à¸ö¶ÔÏóÖеÄÒ»¸öÌá½»Ò»¸öÇëÇó¡£

3. ¿É´¦ÀíÒ»¸öÇëÇóµÄ¶ÔÏ󼯺ÏÓ¦±»¶¯Ì¬Ö¸¶¨¡£

½á¹¹

* Handler

¶¨ÒåÒ»¸ö´¦ÀíÇëÇóµÄ½Ó¿Ú¡£

(¿ÉÑ¡) ʵÏÖºó¼ÌÁ´¡£

* ConcreteHandler

´¦ÀíËüËù¸ºÔðµÄÇëÇó¡£

¿É·ÃÎÊËüµÄºó¼ÌÕß¡£

Èç¹û¿É´¦Àí¸ÃÇëÇó,¾Í´¦ÀíÖ®;·ñÔò½«¸ÃÇëÇóת·¢¸øËüµÄºó¼ÌÕß¡£

* Client

ÏòÁ´ÉϵľßÌå´¦ÀíÕß(ConcreteHandler)¶ÔÏóÌá½»ÇëÇó¡£

Àý×Ó

Command Pattern£¨ÃüÁîģʽ£©

±ðÃû£º¶¯×÷(Action)£¬ÊÂÎñ(Transaction)

Òâͼ

½«Ò»¸öÇëÇó·âװΪһ¸ö¶ÔÏó,´Ó¶øÊ¹Äã¿ÉÓò»Í¬µÄÇëÇó¶Ô¿Í»§½øÐвÎÊý»¯;¶ÔÇëÇóÅŶӡ£

ÊÊÓÃÐÔ

1. ϵͳÐèÒª½«ÇëÇóµ÷ÓÃÕߺÍÇëÇó½ÓÊÕÕß½âñʹµÃµ÷ÓÃÕߺͽÓÊÕÕß²»Ö±½Ó½»»¥¡£

2. ϵͳÐèÒªÔÚ²»Í¬µÄʱ¼äÖ¸¶¨ÇëÇó¡¢½«ÇëÇóÅŶӺÍÖ´ÐÐÇëÇó¡£

3. ϵͳÐèÒªÖ§³ÖÃüÁîµÄ³·Ïú(Undo)²Ù×÷ºÍ»Ö¸´(Redo)²Ù×÷¡£

4. ϵͳÐèÒª½«Ò»×é²Ù×÷×éºÏÔÚÒ»Æð£¬¼´Ö§³ÖºêÃüÁî¡£

½á¹¹

½ÇÉ«ÈçÏ£º

Command£º

¶¨ÒåÃüÁîµÄ½Ó¿Ú£¬ÉùÃ÷Ö´Ðеķ½·¨¡£

ConcreteCommand£º

ÃüÁî½Ó¿ÚʵÏÖ¶ÔÏó£¬ÊÇ¡°Ð顱µÄʵÏÖ£»Í¨³£»á³ÖÓнÓÊÕÕߣ¬²¢µ÷ÓýÓÊÕÕߵŦÄÜÀ´Íê³ÉÃüÁîÒªÖ´ÐеIJÙ×÷¡£

Receiver£º

½ÓÊÕÕߣ¬ÕæÕýÖ´ÐÐÃüÁîµÄ¶ÔÏó¡£ÈκÎÀà¶¼¿ÉÄܳÉΪһ¸ö½ÓÊÕÕߣ¬Ö»ÒªËüÄܹ»ÊµÏÖÃüÁîÒªÇóʵÏÖµÄÏàÓ¦¹¦ÄÜ¡£

Invoker£º

ÒªÇóÃüÁî¶ÔÏóÖ´ÐÐÇëÇó£¬Í¨³£»á³ÖÓÐÃüÁî¶ÔÏ󣬿ÉÒÔ³ÖÓкܶàµÄÃüÁî¶ÔÏó¡£Õâ¸öÊǿͻ§¶ËÕæÕý´¥·¢ÃüÁî²¢ÒªÇóÃüÁîÖ´ÐÐÏàÓ¦²Ù×÷µÄµØ·½£¬Ò²¾ÍÊÇ˵Ï൱ÓÚʹÓÃÃüÁî¶ÔÏóµÄÈë¿Ú¡£

Client£º

´´½¨¾ßÌåµÄÃüÁî¶ÔÏ󣬲¢ÇÒÉèÖÃÃüÁî¶ÔÏóµÄ½ÓÊÕÕß¡£×¢ÒâÕâ¸ö²»ÊÇÎÒÃdz£¹æÒâÒåÉϵĿͻ§¶Ë£¬¶øÊÇÔÚ×é×°ÃüÁî¶ÔÏóºÍ½ÓÊÕÕߣ¬»òÐí£¬°ÑÕâ¸öClient³ÆÎª×°ÅäÕß»á¸üºÃÀí½â£¬ÒòÎªÕæÕýʹÓÃÃüÁîµÄ¿Í»§¶ËÊÇ´ÓInvokerÀ´´¥·¢Ö´ÐС£

Àý×Ó

Óг·Ïú¹¦ÄܵÄÃüÁ

ÓÅȱµã

> Óŵã

1.½µµÍ¶ÔÏóÖ®¼äµÄñîºÏ¶È¡£

2.еÄÃüÁî¿ÉÒÔºÜÈÝÒ׵ؼÓÈ뵽ϵͳÖС£

3.¿ÉÒԱȽÏÈÝÒ×µØÉè¼ÆÒ»¸ö×éºÏÃüÁî¡£

4.µ÷ÓÃͬһ·½·¨ÊµÏÖ²»Í¬µÄ¹¦ÄÜ

> ȱµã

ʹÓÃÃüÁîģʽ¿ÉÄܻᵼÖÂijЩϵͳÓйý¶àµÄ¾ßÌåÃüÁîÀà¡£ÒòΪÕë¶Ôÿһ¸öÃüÁî¶¼ÐèÒªÉè¼ÆÒ»¸ö¾ßÌåÃüÁîÀ࣬Òò´ËijЩϵͳ¿ÉÄÜÐèÒª´óÁ¿¾ßÌåÃüÁîÀ࣬Õ⽫ӰÏìÃüÁîģʽµÄʹÓá£

Interpreter Pattern£¨½âÊÍÆ÷ģʽ£©

Òâͼ

¸ø¶¨Ò»¸öÓïÑÔ£¬¶¨ÒåËüµÄÎÄ·¨µÄÒ»ÖÖ±íʾ£¬²¢¶¨ÒåÒ»¸ö½âÊÍÆ÷£¬Õâ¸ö½âÊÍÆ÷ʹÓøñíʾÀ´½âÊÍÓïÑÔÖеľä×Ó¡£

½á¹¹

ģʽËùÉæ¼°µÄ½ÇÉ«ÈçÏÂËùʾ£º

¡¡¡¡£¨1£©³éÏó±í´ïʽ(Expression)½ÇÉ«£ºÉùÃ÷Ò»¸öËùÓеľßÌå±í´ïʽ½ÇÉ«¶¼ÐèҪʵÏֵijéÏó½Ó¿Ú¡£Õâ¸ö½Ó¿ÚÖ÷ÒªÊÇÒ»¸öinterpret()·½·¨£¬³Æ×ö½âÊͲÙ×÷¡£

¡¡¡¡£¨2£©ÖÕ½á·û±í´ïʽ(Terminal Expression)½ÇÉ«£ºÊµÏÖÁ˳éÏó±í´ïʽ½ÇÉ«ËùÒªÇóµÄ½Ó¿Ú£¬Ö÷ÒªÊÇÒ»¸öinterpret()·½·¨£»ÎÄ·¨ÖеÄÿһ¸öÖÕ½á·û¶¼ÓÐÒ»¸ö¾ßÌåÖÕ½á±í´ïʽÓëÖ®Ïà¶ÔÓ¦¡£±ÈÈçÓÐÒ»¸ö¼òµ¥µÄ¹«Ê½R=R1+R2£¬ÔÚÀïÃæR1ºÍR2¾ÍÊÇÖÕ½á·û£¬¶ÔÓ¦µÄ½âÎöR1ºÍR2µÄ½âÊÍÆ÷¾ÍÊÇÖÕ½á·û±í´ïʽ¡£

¡¡¡¡£¨3£©·ÇÖÕ½á·û±í´ïʽ(Nonterminal Expression)½ÇÉ«£ºÎÄ·¨ÖеÄÿһÌõ¹æÔò¶¼ÐèÒªÒ»¸ö¾ßÌåµÄ·ÇÖÕ½á·û±í´ïʽ£¬·ÇÖÕ½á·û±í´ïʽһ°ãÊÇÎÄ·¨ÖеÄÔËËã·û»òÕ߯äËû¹Ø¼ü×Ö£¬±ÈÈ繫ʽR=R1+R2ÖУ¬¡°+"¾ÍÊÇ·ÇÖÕ½á·û£¬½âÎö¡°+¡±µÄ½âÊÍÆ÷¾ÍÊÇÒ»¸ö·ÇÖÕ½á·û±í´ïʽ¡£

¡¡¡¡£¨4£©»·¾³(Context)½ÇÉ«£ºÕâ¸ö½ÇÉ«µÄÈÎÎñÒ»°ãÊÇÓÃÀ´´æ·ÅÎÄ·¨Öи÷¸öÖÕ½á·ûËù¶ÔÓ¦µÄ¾ßÌåÖµ£¬±ÈÈçR=R1+R2£¬ÎÒÃǸøR1¸³Öµ100£¬¸øR2¸³Öµ200¡£ÕâЩÐÅÏ¢ÐèÒª´æ·Åµ½»·¾³½ÇÉ«ÖУ¬ºÜ¶àÇé¿öÏÂÎÒÃÇʹÓÃMapÀ´³äµ±»·¾³½ÇÉ«¾Í×ã¹»ÁË¡£

ÊÊÓÃÐÔ

µ±ÓÐÒ»¸öÓïÑÔÐèÒª½âÊÍÖ´ÐÐ , ²¢ÇÒÄã¿É½«¸ÃÓïÑÔÖеľä×Ó±íʾΪһ¸ö³éÏóÓï·¨Ê÷ʱ,¿ÉʹÓýâÊÍÆ÷ģʽ¡£¶øµ±´æÔÚÒÔÏÂÇé¿öʱ¸ÃģʽЧ¹û×îºÃ:

* ¸ÃÎÄ·¨¼òµ¥¶ÔÓÚ¸´ÔÓµÄÎÄ·¨ , ÎÄ·¨µÄÀà²ã´Î±äµÃÅÓ´ó¶øÎÞ·¨¹ÜÀí¡£´ËʱÓï·¨·ÖÎö³ÌÐòÉú ?³ÉÆ÷ÕâÑùµÄ¹¤¾ßÊǸüºÃµÄÑ¡Ôñ¡£ËüÃÇÎÞÐè¹¹½¨³éÏóÓï·¨Ê÷¼´¿É½âÊͱí´ïʽ , ÕâÑù¿ÉÒÔ½Ú Ê¡¿Õ¼ä¶øÇÒ»¹¿ÉÄܽÚʡʱ¼ä¡£ ?

* ЧÂʲ»ÊÇÒ»¸ö¹Ø¼üÎÊÌâ×î¸ßЧµÄ½âÊÍÆ÷ͨ³£²»ÊÇͨ¹ýÖ±½Ó½âÊÍÓï·¨·ÖÎöÊ÷ʵÏÖµÄ , ¶øÊÇ ?Ê×ÏȽ«ËüÃÇת»»³ÉÁíÒ»ÖÖÐÎʽ¡£ÀýÈç,ÕýÔò±í´ïʽͨ³£±»×ª»»³É״̬»ú¡£µ«¼´Ê¹ÔÚÕâÖÖ Çé¿öÏÂ, ת»»Æ÷ÈÔ¿ÉÓýâÊÍÆ÷ģʽʵÏÖ, ¸ÃģʽÈÔÊÇÓÐÓõġ£ ?

Àý×Ó

SQLÓï¾ä½âÎö

XML/JSON½âÎö

±à³ÌÓïÑԵıàÒëÆ÷

ÕýÔò±í´ïʽ

¡­

ÓÅȱµã

> Óŵ㣺

(1)Ò×ÓڸıäºÍÀ©Õ¹ÎÄ·¨¡£ÓÉÓÚÔÚ½âÊÍÆ÷ģʽÖÐʹÓÃÀàÀ´±íʾÓïÑÔµÄÎÄ·¨¹æÔò£¬Òò´Ë¿ÉÒÔͨ¹ý¼Ì³ÐµÈ»úÖÆÀ´¸Ä±ä»òÀ©Õ¹ÎÄ·¨¡£

(2)ÿһÌõÎÄ·¨¹æÔò¶¼¿ÉÒÔ±íʾΪһ¸öÀ࣬Òò´Ë¿ÉÒÔ·½±ãµØÊµÏÖÒ»¸ö¼òµ¥µÄÓïÑÔ¡£

(3)ʵÏÖÎÄ·¨½ÏΪÈÝÒס£ÔÚ³éÏóÓï·¨Ê÷ÖÐÿһ¸ö±í´ïʽ½ÚµãÀàµÄʵÏÖ·½Ê½¶¼ÊÇÏàËÆµÄ£¬ÕâЩÀàµÄ´úÂë±àд¶¼²»»áÌØ±ð¸´ÔÓ£¬»¹¿ÉÒÔͨ¹ýһЩ¹¤¾ß×Ô¶¯Éú³É½ÚµãÀà´úÂë¡£

(4)Ôö¼ÓеĽâÊͱí´ïʽ½ÏΪ·½±ã¡£Èç¹ûÓû§ÐèÒªÔö¼ÓеĽâÊͱí´ïʽֻÐèÒª¶ÔÓ¦Ôö¼ÓÒ»¸öеÄÖÕ½á·û±í´ïʽ»ò·ÇÖÕ½á·û±í´ïʽÀ࣬ԭÓбí´ïʽÀà´úÂëÎÞÐëÐ޸쬷ûºÏ¡°¿ª±ÕÔ­Ôò¡±¡£

> ȱµã£º

(1)¶ÔÓÚ¸´ÔÓÎÄ·¨ÄÑÒÔά»¤¡£ÔÚ½âÊÍÆ÷ģʽÖУ¬Ã¿Ò»Ìõ¹æÔòÖÁÉÙÐèÒª¶¨ÒåÒ»¸öÀ࣬Òò´ËÈç¹ûÒ»¸öÓïÑÔ°üº¬Ì«¶àÎÄ·¨¹æÔò£¬ÀàµÄ¸öÊý½«»á¼±¾çÔö¼Ó£¬µ¼ÖÂϵͳÄÑÒÔ¹ÜÀíºÍά»¤£¬´Ëʱ¿ÉÒÔ¿¼ÂÇʹÓÃÓï·¨·ÖÎö³ÌÐòµÈ·½Ê½À´È¡´ú½âÊÍÆ÷ģʽ¡£

(2)Ö´ÐÐЧÂʽϵ͡£ÓÉÓÚÔÚ½âÊÍÆ÷ģʽÖÐʹÓÃÁË´óÁ¿µÄÑ­»·ºÍµÝ¹éµ÷Óã¬Òò´ËÔÚ½âÊͽÏΪ¸´Ôӵľä×ÓʱÆäËٶȺÜÂý£¬¶øÇÒ´úÂëµÄµ÷ÊÔ¹ý³ÌÒ²±È½ÏÂé·³¡£

Iterator Pattern£¨µü´úÆ÷ģʽ£©

Òâͼ

ÌṩһÖÖ·½·¨Ë³Ðò·ÃÎÊÒ»¸ö¾ÛºÏ¶ÔÏóÖи÷¸öÔªËØ, ¶øÓÖ²»Ð豩¶¸Ã¶ÔÏóµÄÄÚ²¿±íʾ¡£

ÊÊÓÃÐÔ

1. ·ÃÎÊÒ»¸ö¾ÛºÏ¶ÔÏóµÄÄÚÈݶøÎÞÐ豩¶ËüµÄÄÚ²¿±íʾ¡£

2. Ö§³Ö¶Ô¾ÛºÏ¶ÔÏóµÄ¶àÖÖ±éÀú¡£

3. Ϊ±éÀú²»Í¬µÄ¾ÛºÏ½á¹¹Ìṩһ¸öͳһµÄ½Ó¿Ú£¨¼´, Ö§³Ö¶à̬µü´ú£©¡£

½á¹¹

²ÎÓëÕߣº

* Iterator£¨µü´úÆ÷£©

µü´úÆ÷¶¨Òå·ÃÎʺͱéÀúÔªËØµÄ½Ó¿Ú¡£

* ConcreteIterator £¨¾ßÌåµü´úÆ÷£©

¾ßÌåµü´úÆ÷ʵÏÖµü´úÆ÷½Ó¿Ú¡£

¶Ô¸Ã¾ÛºÏ±éÀúʱ¸ú×Ùµ±Ç°Î»Öá£

* Aggregate £¨¾ÛºÏ£©

¾ÛºÏ¶¨Òå´´½¨ÏàÓ¦µü´úÆ÷¶ÔÏóµÄ½Ó¿Ú¡£

* ConcreteAggregate £¨¾ßÌå¾ÛºÏ£©

¾ßÌå¾ÛºÏʵÏÖ´´½¨ÏàÓ¦µü´úÆ÷µÄ½Ó¿Ú£¬¸Ã²Ù×÷·µ»ØConcreteIteratorµÄÒ»¸öÊʵ±µÄʵÀý¡£

Àý×Ó

±à³ÌÓïÑÔ¼¶±ðÒѾ­Ìṩ£¬È磺Êý×é¡¢¼¯ºÏ¡¢foreachÑ­»·¡£

Mediator Pattern£¨ÖнéÕßģʽ£©

Òâͼ

ÓÃÒ»¸öÖнé¶ÔÏóÀ´·âװһϵÁеĶÔÏó½»»¥¡£ÖнéÕßʹ¸÷¶ÔÏó²»ÐèÒªÏÔʽµØÏ໥ÒýÓ㬴ӶøÊ¹ÆäñîºÏËÉÉ¢£¬¶øÇÒ¿ÉÒÔ¶ÀÁ¢µØ¸Ä±äËüÃÇÖ®¼äµÄ½»»¥¡£

ÊÊÓÃÐÔ

* Ò»×é¶ÔÏóÒÔ¶¨ÒåÁ¼ºÃµ«ÊǸ´Ôӵķ½Ê½½øÐÐͨÐÅ¡£²úÉúµÄÏ໥ÒÀÀµ¹ØÏµ½á¹¹»ìÂÒÇÒÄÑÒÔÀí½â¡£

* Ò»¸ö¶ÔÏóÒýÓÃÆäËûºÜ¶à¶ÔÏó²¢ÇÒÖ±½ÓÓëÕâЩ¶ÔÏóͨÐÅ,µ¼ÖÂÄÑÒÔ¸´ÓøöÔÏó¡£

* Ïë¶¨ÖÆÒ»¸ö·Ö²¼ÔÚ¶à¸öÀàÖеÄÐÐΪ£¬¶øÓÖ²»ÏëÉú³ÉÌ«¶àµÄ×ÓÀà¡£

½á¹¹

²ÎÓëÕߣº

Mediator(ÖнéÕß)

¡¡¡¡ÖнéÕß¶¨ÒåÒ»¸ö½Ó¿ÚÓÃÓÚÓë¸÷ͬÊÂ( Colleague)¶ÔÏóͨÐÅ¡£

ConcreteMediator(¾ßÌåÖнéÕß)

¡¡¡¡¡ª ¾ßÌåÖнéÕßͨ¹ýЭµ÷¸÷ͬʶÔÏóʵÏÖЭ×÷ÐÐΪ¡£

¡ª Á˽Ⲣά»¤ËüµÄ¸÷¸öͬÊ¡£

Colleague class(ͬÊÂÀà)

¡ª ÿһ¸öͬÊÂÀà¶¼ÖªµÀËüµÄÖнéÕß¶ÔÏó¡£

¡ª ÿһ¸öͬʶÔÏóÔÚÐèÓëÆäËûµÄͬÊÂͨÐŵÄʱºò,ÓëËüµÄÖнéÕßͨÐÅ¡£

Àý×Ó

ÓÅȱµã

> Óŵ㣺

ÖнéÕßģʽµÄÓŵã¾ÍÊǼõÉÙÀà¼äµÄÒÀÀµ£¬°ÑÔ­ÓеÄÒ»¶Ô¶àµÄÒÀÀµ±ä³ÉÁËÒ»¶ÔÒ»µÄÒÀÀµ£¬Í¬ÊÂÀàÖ»ÒÀÀµÖнéÕߣ¬¼õÉÙÁËÒÀÀµ£¬µ±È»Í¬Ê±Ò²½µµÍÁËÀà¼äµÄñîºÏ¡£

> ȱµã£º

ÖнéÕßģʽµÄȱµã¾ÍÊÇÖнéÕß»áÅòÕ͵úܴ󣬶øÇÒÂß¼­¸´ÔÓ£¬Ô­±¾N¸ö¶ÔÏóÖ±½ÓµÄÏ໥ÒÀÀµ¹ØÏµ×ª»»ÎªÖнéÕߺÍͬÊÂÀàµÄÒÀÀµ¹ØÏµ£¬Í¬ÊÂÀàÔ½¶à£¬ÖнéÕßµÄÂß¼­¾ÍÔ½¸´ÔÓ¡£

Mememto Pattern£¨±¸Íü¼ģʽ£©

Òâͼ

ÔÚ²»ÆÆ»µ·â×°ÐÔµÄǰÌáÏ£¬²¶»ñÒ»¸ö¶ÔÏóµÄÄÚ²¿×´Ì¬£¬²¢ÔڸöÔÏóÖ®Íâ±£´æÕâ¸ö״̬¡£ÕâÑùÒÔºó¾Í¿É½«¸Ã¶ÔÏó»Ö¸´µ½±£´æµÄ״̬¡£

ÊÊÓÃÐÔ

* ±ØÐë±£´æÒ»¸ö¶ÔÏóÔÚijһ¸öʱ¿ÌµÄ(²¿·Ö)״̬, ÕâÑùÒÔºóÐèҪʱËü²ÅÄָܻ´µ½ÏÈǰµÄ״̬¡£

* Èç¹ûÒ»¸öÓýӿÚÀ´ÈÃÆäËü¶ÔÏóÖ±½ÓµÃµ½ÕâЩ״̬£¬½«»á±©Â¶¶ÔÏóµÄʵÏÖϸ½Ú²¢ÆÆ»µ¶ÔÏóµÄ·â×°ÐÔ¡£

½á¹¹

Éæ¼°½ÇÉ«£º

* Originator(·¢ÆðÈË)£º¸ºÔð´´½¨Ò»¸ö±¸Íü¼Memento£¬ÓÃÒԼǼµ±Ç°Ê±¿Ì×ÔÉíµÄÄÚ²¿×´Ì¬£¬²¢¿ÉʹÓñ¸Íü¼»Ö¸´ÄÚ²¿×´Ì¬¡£Originator¿ÉÒÔ¸ù¾ÝÐèÒª¾ö¶¨Memento´æ´¢×Ô¼ºµÄÄÄЩÄÚ²¿×´Ì¬¡£

* Memento(±¸Íü¼)£º¸ºÔð´æ´¢Originator¶ÔÏóµÄÄÚ²¿×´Ì¬£¬²¢¿ÉÒÔ·ÀÖ¹OriginatorÒÔÍâ µÄÆäËû¶ÔÏó·ÃÎʱ¸Íü¼¡£±¸Íü¼ÓÐÁ½¸ö½Ó¿Ú£ºCaretakerÖ»ÄÜ¿´µ½±¸Íü¼µÄÕ­½Ó¿Ú£¬ËûÖ»Äܽ«±¸Íü¼´«µÝ¸øÆäËû¶ÔÏó¡£OriginatorÈ´¿É¿´µ½±¸Íü ¼µÄ¿í½Ó¿Ú£¬ÔÊÐíËü·ÃÎÊ·µ»Øµ½ÏÈǰ״̬ËùÐèÒªµÄËùÓÐÊý¾Ý¡£

* Caretaker(¹ÜÀíÕß)£º¸ºÔð±¸Íü¼Memento£¬²»ÄܶÔMementoµÄÄÚÈݽøÐзÃÎÊ»òÕß²Ù×÷¡£

Àý×Ó

ÒÔ±£´æÓÎÏ·½ø¶ÈΪÀý£¬ÔÚÓÎÏ·½ÇÉ«´óÕ½Bossǰ½«¸Ã½ÇÉ«µÄ״̬´æ´¢£¬ÓëBoss×÷Õ½ºó½ÇÉ«µÄ¸÷ÏîÄÜÁ¦»áϽµ£¬Èç¹ûûÓÐͨ¹Ø£¬Ôò¿ÉÀûÓñ¸Íü¼½øÐлָ´µ½Õ½Ç°×´Ì¬¡£

ÓÅȱµã

> Óŵ㣺

1¡¢ÓÐʱһЩ·¢ÆðÈ˶ÔÏóµÄÄÚ²¿ÐÅÏ¢±ØÐë±£´æÔÚ·¢ÆðÈ˶ÔÏóÒÔÍâµÄµØ·½£¬µ«ÊDZØÐëÒªÓÉ·¢ÆðÈ˶ÔÏó×Ô¼º¶ÁÈ¡£¬Õâʱ£¬

ʹÓñ¸Íü¼ģʽ¿ÉÒ԰Ѹ´Ôӵķ¢ÆðÈËÄÚ²¿ÐÅÏ¢¶ÔÆäËûµÄ¶ÔÏóÆÁ±ÎÆðÀ´£¬´Ó¶ø¿ÉÒÔÇ¡µ±µØ±£³Ö·â×°µÄ±ß½ç¡£

2¡¢±¾Ä£Ê½¼ò»¯ÁË·¢ÆðÈËÀà¡£·¢ÆðÈ˲»ÔÙÐèÒª¹ÜÀíºÍ±£´æÆäÄÚ²¿×´Ì¬µÄÒ»¸ö¸ö°æ±¾£¬¿Í»§¶Ë¿ÉÒÔ×ÔÐйÜÀíËûÃÇËùÐè

ÒªµÄÕâЩ״̬µÄ°æ±¾¡£

> ȱµã£º

1¡¢Èç¹û·¢ÆðÈ˽ÇÉ«µÄ״̬ÐèÒªÍêÕûµØ´æ´¢µ½±¸Íü¼¶ÔÏóÖУ¬ÄÇôÔÚ×ÊÔ´ÏûºÄÉÏÃæ±¸Íü¼¶ÔÏó»áºÜ°º¹ó¡£

2¡¢µ±¸ºÔðÈ˽ÇÉ«½«Ò»¸ö±¸Íü¼ ´æ´¢ÆðÀ´µÄʱºò£¬¸ºÔðÈË¿ÉÄܲ¢²»ÖªµÀÕâ¸ö״̬»áÕ¼Óöà´óµÄ´æ´¢¿Õ¼ä£¬´Ó¶øÎÞ·¨ÌáÐÑÓû§Ò»¸ö²Ù×÷ÊÇ·ñºÜ°º¹ó¡£

3¡¢µ±·¢ÆðÈ˽ÇÉ«µÄ״̬¸Ä±äµÄʱºò£¬ÓпÉÄÜÕâ¸öЭÒéÎÞЧ¡£Èç¹û״̬¸Ä±äµÄ³É¹¦Âʲ»¸ßµÄ»°£¬²»Èç²ÉÈ¡¡°¼ÙÈ硱ЭÒéģʽ¡£

Observer Pattern£¨¹Û²ìÕßģʽ£©

Òâͼ

¶¨Òå¶ÔÏó¼äµÄÒ»ÖÖÒ»¶Ô¶àµÄÒÀÀµ¹ØÏµ,µ±Ò»¸ö¶ÔÏóµÄ״̬·¢Éú¸Ä±äʱ, ËùÓÐÒÀÀµÓÚËüµÄ¶ÔÏ󶼵õ½Í¨Öª²¢±»×Ô¶¯¸üС£

ÊÊÓÃÐÔ

* µ±Ò»¸ö³éÏóÄ£ÐÍÓÐÁ½¸ö·½Ãæ, ÆäÖÐÒ»¸ö·½ÃæÒÀÀµÓÚÁíÒ»·½Ãæ¡£½«Õâ¶þÕß·â×°ÔÚ¶ÀÁ¢µÄ¶ÔÏóÖÐÒÔʹËüÃÇ¿ÉÒÔ¸÷×Ô¶ÀÁ¢µØ¸Ä±äºÍ¸´Óá£

* µ±¶ÔÒ»¸ö¶ÔÏóµÄ¸Ä±äÐèҪͬʱ¸Ä±äÆäËü¶ÔÏó, ¶ø²»ÖªµÀ¾ßÌåÓжàÉÙ¶ÔÏóÓдý¸Ä±ä¡£

* µ±Ò»¸ö¶ÔÏó±ØÐë֪ͨÆäËü¶ÔÏ󣬶øËüÓÖ²»Äܼٶ¨ÆäËü¶ÔÏóÊÇË­¡£»»ÑÔÖ®£¬Ä㲻ϣÍûÕâЩ¶ÔÏóÊǽôÃÜñîºÏµÄ¡£

½á¹¹

²ÎÓëÕß

* Subject(Ä¿±ê)

¡ª Ä¿±êÖªµÀËüµÄ¹Û²ìÕß¡£¿ÉÒÔÓÐÈÎÒâ¶à¸ö¹Û²ìÕß¹Û²ìͬһ¸öÄ¿±ê¡£

¡ª Ìṩע²áºÍɾ³ý¹Û²ìÕß¶ÔÏóµÄ½Ó¿Ú¡£ ? Observer(¹Û²ìÕß)

¡ª ΪÄÇЩÔÚÄ¿±ê·¢Éú¸Ä±äʱÐè»ñµÃ֪ͨµÄ¶ÔÏó¶¨ÒåÒ»¸ö¸üнӿڡ£

* ConcreteSubject(¾ßÌåÄ¿±ê)

¡ª ½«ÓйØ×´Ì¬´æÈë¸÷ConcreteObserver¶ÔÏó¡£

¡ª µ±ËüµÄ״̬·¢Éú¸Ä±äʱ , ÏòËüµÄ¸÷¸ö¹Û²ìÕß·¢³ö֪ͨ¡£

* ConcreteObserver(¾ßÌå¹Û²ìÕß)

¡ª ά»¤Ò»¸öÖ¸ÏòConcreteSubject¶ÔÏóµÄÒýÓᣡª ´æ´¢ÓйØ×´Ì¬,ÕâЩ״̬ӦÓëÄ¿±êµÄ״̬±£³ÖÒ»Ö¡£¡ª ʵÏÖObserverµÄ¸üнӿÚÒÔʹ×ÔÉí״̬ÓëÄ¿±êµÄ״̬±£³ÖÒ»Ö¡£

Àý×Ó

State Pattern£¨×´Ì¬Ä£Ê½£©

Òâͼ

ÔÊÐíÒ»¸ö¶ÔÏóÔÚÆäÄÚ²¿×´Ì¬¸Ä±äʱ¸Ä±äËüµÄÐÐΪ¡£¶ÔÏó¿´ÆðÀ´ËƺõÐÞ¸ÄÁËËüµÄÀà¡£

ÊÊÓÃÐÔ

* Ò»¸ö¶ÔÏóµÄÐÐΪȡ¾öÓÚËüµÄ״̬, ²¢ÇÒËü±ØÐëÔÚÔËÐÐʱ¿Ì¸ù¾Ý״̬¸Ä±äËüµÄÐÐΪ¡£

* Ò»¸ö²Ù×÷Öк¬ÓÐ ÅÓ´óµÄ¶à·ÖÖ§µÄÌõ¼þÓï¾ä£¬ÇÒÕâЩ·ÖÖ§ÒÀÀµÓڸöÔÏóµÄ״̬¡£Õâ¸ö״̬ͨ³£ÓÃÒ»¸ö»ò¶à¸öö¾Ù³£Á¿±íʾ¡£Í¨³£, Óжà¸ö²Ù×÷°üº¬ÕâÒ»ÏàͬµÄÌõ¼þ½á¹¹¡£Stateģʽ½«Ã¿Ò»¸öÌõ¼þ·ÖÖ§·ÅÈëÒ»¸ö¶ÀÁ¢µÄÀàÖС£ÕâʹµÃÄã¿ÉÒÔ¸ù¾Ý¶ÔÏó×ÔÉíµÄÇé¿ö½«¶ÔÏóµÄ״̬×÷Ϊһ¸ö¶ÔÏó£¬ÕâÒ» ¶ÔÏó¿ÉÒÔ²»ÒÀÀµÓÚÆäËû¶ÔÏó¶ø¶ÀÁ¢±ä»¯¡£

½á¹¹

²ÎÓëÕߣº

* Context(»·¾³½ÇÉ«)

¡ª ¶¨Òå¿Í»§¸ÐÐËȤµÄ½Ó¿Ú¡£

¡ª ά»¤Ò»¸öConcreteState×ÓÀàµÄʵÀý,Õâ¸öʵÀý¶¨Ò嵱ǰ״̬¡£

* State(³éÏó״̬½ÇÉ«)

¡ª ¶¨ÒåÒ»¸ö½Ó¿ÚÒÔ·â×°Óë ContextµÄÒ»¸öÌØ¶¨×´Ì¬Ïà¹ØµÄÐÐΪ¡£

* ConcreteState subclasses(¾ßÌå״̬½ÇÉ«)

¡ª ÿһ×ÓÀàʵÏÖÒ»¸öÓëContextµÄÒ»¸ö״̬Ïà¹ØµÄÐÐΪ¡£

Àý×Ó

ÓÅȱµã

> Óŵ㣺

1. ½á¹¹ÇåÎú

±ÜÃâÁ˹ý¶àµÄswitch...case»òÕßif...elseÓï¾äµÄʹÓ㬱ÜÃâÁ˳ÌÐòµÄ¸´ÔÓÐÔ£¬Ìá¸ßϵͳµÄ¿Éά»¤ÐÔ¡£

2. ×ñÑ­Éè¼ÆÔ­Ôò

ºÜºÃµØÌåÏÖÁË¿ª±ÕÔ­ÔòºÍµ¥Ò»Ö°ÔðÔ­Ôò£¬Ã¿¸ö״̬¶¼ÊÇÒ»¸ö×ÓÀ࣬ÄãÒªÔö¼Ó״̬¾ÍÒªÔö¼Ó×ÓÀ࣬ÄãÒªÐÞ¸Ä״̬£¬ÄãÖ»ÐÞ¸ÄÒ»¸ö×ÓÀà¾Í¿ÉÒÔÁË¡£

3. ·â×°ÐԷdz£ºÃ

ÕâÒ²ÊÇ״̬ģʽµÄ»ù±¾ÒªÇó£¬×´Ì¬±ä»»·ÅÖõ½ÀàµÄÄÚ²¿À´ÊµÏÖ£¬ÍⲿµÄµ÷Óò»ÓÃÖªµÀÀàÄÚ²¿ÈçºÎʵÏÖ״̬ºÍÐÐΪµÄ±ä»»¡£

> ȱµã£º

×ÓÀà»áÌ«¶à£¬ÀàÅòÕÍ¡£

> ×¢ÒâÊÂÏ

״̬ģʽÊÊÓÃÓÚµ±Ä³¸ö¶ÔÏóÔÚËüµÄ״̬·¢Éú¸Ä±äʱ£¬ËüµÄÐÐÎªÒ²Ëæ×Å·¢Éú±È½Ï´óµÄ±ä»¯£¬Ò²¾ÍÊÇ˵ÔÚÐÐΪÊÜ×´Ì¬Ô¼ÊøµÄÇé¿öÏ¿ÉÒÔʹÓÃ״̬ģʽ£¬¶øÇÒʹÓÃʱ¶ÔÏóµÄ״̬×îºÃ²»Òª³¬¹ý5¸ö¡£

Strategy Pattern£¨²ßÂÔģʽ£©

Òâͼ

¶¨ÒåһϵÁеÄËã·¨,°ÑËüÃÇÒ»¸ö¸ö·â×°ÆðÀ´, ²¢ÇÒʹËüÃÇ¿ÉÏà»¥Ìæ»»¡£±¾Ä£Ê½Ê¹µÃËã·¨¿É¶ÀÁ¢ÓÚʹÓÃËüµÄ¿Í»§¶ø±ä»¯¡£

ÊÊÓÃÐÔ

1. Ðí¶àÏà¹ØµÄÀà½ö½öÊÇÐÐΪÓÐÒì¡£¡°²ßÂÔ¡±ÌṩÁËÒ»ÖÖÓöà¸öÐÐΪÖеÄÒ»¸öÐÐΪÀ´ÅäÖÃÒ»¸öÀàµÄ·½·¨¡£

2. ÐèҪʹÓÃÒ»¸öËã·¨µÄ²»Í¬±äÌå¡£ÀýÈ磬Äã¿ÉÄܻᶨÒåһЩ·´Ó³²»Í¬µÄ¿Õ¼ä/ʱ¼äȨºâµÄËã·¨¡£µ±ÕâЩ±äÌåʵÏÖΪһ¸öËã·¨µÄÀà²ã´Îʱ£¬¿ÉÒÔʹÓòßÂÔģʽ¡£

3. Ë㷨ʹÓÿͻ§²»Ó¦¸ÃÖªµÀµÄÊý¾Ý¡£¿ÉʹÓòßÂÔģʽÒÔ±ÜÃⱩ¶¸´Ôӵġ¢ÓëËã·¨Ïà¹ØµÄÊý¾Ý½á¹¹¡£

4. Ò»¸öÀඨÒåÁ˶àÖÖÐÐΪ, ²¢ÇÒÕâЩÐÐΪÔÚÕâ¸öÀàµÄ²Ù×÷ÖÐÒÔ¶à¸öÌõ¼þÓï¾äµÄÐÎʽ³öÏÖ¡£½«Ïà¹ØµÄÌõ¼þ·ÖÖ§ÒÆÈëËüÃǸ÷×ÔµÄStrategyÀàÖÐÒÔ´úÌæÕâЩÌõ¼þÓï¾ä¡£

½á¹¹

²ÎÓëÕߣº

> Strategy(²ßÂÔ)

¡ª ¶¨ÒåËùÓÐÖ§³ÖµÄËã·¨µÄ¹«¹²½Ó¿Ú¡£ContextʹÓÃÕâ¸ö½Ó¿ÚÀ´µ÷ÓÃij ConcreteStrategy¶¨ ÒåµÄËã·¨¡£

> ConcreteStrategy(¾ßÌå²ßÂÔ)

¡ª ÒÔStrategy½Ó¿ÚʵÏÖij¾ßÌåËã·¨¡£

> Context(ÉÏÏÂÎÄ)?

¡ª ÓÃÒ»¸öConcreteStrategy¶ÔÏóÀ´ÅäÖá£

¡ª ά»¤Ò»¸ö¶ÔStrategy¶ÔÏóµÄÒýÓá£

¡ª ¿É¶¨ÒåÒ»¸ö½Ó¿ÚÀ´ÈÃStategy·ÃÎÊËüµÄÊý¾Ý¡£

Àý×Ó

ÓÅȱµã

> Óŵ㣺

* Ëã·¨¿ÉÒÔ×ÔÓÉÇл»

ÕâÊDzßÂÔģʽ±¾Éí¶¨ÒåµÄ£¬Ö»ÒªÊµÏÖ³éÏó²ßÂÔ£¬Ëü¾Í³ÉΪ²ßÂÔ¼Ò×åµÄÒ»¸ö³ÉÔ±£¬Í¨¹ý·â×°½ÇÉ«¶ÔÆä½øÐзâ×°£¬±£Ö¤¶ÔÍâÌṩ¡°¿É×ÔÓÉÇл»¡±µÄ²ßÂÔ¡£

* ±ÜÃâʹÓöàÖØÌõ¼þÅжÏ

Èç¹ûûÓвßÂÔģʽ£¬ÎÒÃÇÏëÏë¿´»áÊÇʲôÑù×Ó£¿Ò»¸ö²ßÂÔ¼Ò×åÓÐ5¸ö²ßÂÔËã·¨£¬Ò»»áҪʹÓÃA²ßÂÔ£¬Ò»»áҪʹÓÃB²ßÂÔ£¬ÔõôÉè¼ÆÄØ£¿Ê¹ÓöàÖØµÄÌõ¼þÓï¾ä£¿¶àÖØÌõ¼þÓï¾ä²»Ò×ά»¤£¬¶øÇÒ³ö´íµÄ¸ÅÂÊ´ó´óÔöÇ¿¡£Ê¹ÓòßÂÔģʽºó£¬¿ÉÒÔÓÉÆäËûÄ£¿é¾ö¶¨²ÉÓúÎÖÖ²ßÂÔ£¬²ßÂÔ¼Ò×å¶ÔÍâÌṩµÄ·ÃÎʽӿھÍÊÇ·â×°À࣬¼ò»¯Á˲Ù×÷£¬Í¬Ê±±ÜÃâÁËÌõ¼þÓï¾äÅжϡ£

* À©Õ¹ÐÔÁ¼ºÃ

ÕâÉõÖÁ¶¼²»ÓÃ˵ÊÇËüµÄÓŵ㣬ÒòΪËüÌ«Ã÷ÏÔÁË¡£ÔÚÏÖÓеÄϵͳÖÐÔö¼ÓÒ»¸ö²ßÂÔÌ«ÈÝÒ×ÁË£¬Ö»ÒªÊµÏֽӿھͿÉÒÔÁË£¬ÆäËû¶¼²»ÓÃÐ޸ģ¬ÀàËÆÓÚÒ»¸ö¿É·´¸´²ðжµÄ²å¼þ£¬Õâ´ó´óµØ·ûºÏÁËOCPÔ­Ôò¡£

> ȱµã£º

* ²ßÂÔÀàÊýÁ¿Ôö¶à

ÿһ¸ö²ßÂÔ¶¼ÊÇÒ»¸öÀ࣬¸´ÓõĿÉÄÜÐÔºÜС£¬ÀàÊýÁ¿Ôö¶à¡£

* ËùÓеIJßÂÔÀà¶¼ÐèÒª¶ÔÍⱩ¶

ÉϲãÄ£¿é±ØÐëÖªµÀÓÐÄÄЩ²ßÂÔ£¬È»ºó²ÅÄܾö¶¨Ê¹ÓÃÄÄÒ»¸ö²ßÂÔ£¬ÕâÓëµÏÃ×ÌØ·¨ÔòÊÇÏàÎ¥±³µÄ£¬ÎÒÖ»ÊÇÏëʹÓÃÁËÒ»¸ö²ßÂÔ£¬ÎÒÆ¾Ê²Ã´¾ÍÒªÁ˽âÕâ¸ö²ßÂÔÄØ£¿ÄÇÒªÄãµÄ·â×°À໹ÓÐʲôÒâÒ壿ÕâÊÇÔ­×°²ßÂÔģʽµÄÒ»¸öȱµã£¬ÐÒÔ˵ÄÊÇ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÆäËûģʽÀ´ÐÞÕýÕâ¸öȱÏÝ£¬È繤³§·½·¨Ä£Ê½¡¢´úÀíģʽ»òÏíԪģʽ¡£

TemplateMethod Pattern£¨Ä£°æ·½·¨Ä£Ê½£©

Òâͼ

¶¨ÒåÒ»¸ö²Ù×÷ÖеÄËã·¨µÄ¹Ç¼Ü£¬¶ø½«Ò»Ð©²½ÖèÑÓ³Ùµ½×ÓÀàÖС£Template MethodʹµÃ×ÓÀà¿ÉÒÔ²»¸Ä±äÒ»¸öËã·¨µÄ½á¹¹¼´¿ÉÖØ¶¨Òå¸ÃËã·¨µÄÄ³Ð©ÌØ¶¨²½Öè¡£

ÊÊÓÃÐÔ

* Ò»´ÎÐÔʵÏÖÒ»¸öËã·¨µÄ²»±äµÄ²¿·Ö£¬²¢½«¿É±äµÄÐÐΪÁô¸ø×ÓÀàÀ´ÊµÏÖ¡£

* ¸÷×ÓÀàÖй«¹²µÄ ÐÐΪӦ±»ÌáÈ¡³öÀ´²¢¼¯Öе½Ò»¸ö¹«¹²¸¸ÀàÖÐÒÔ±ÜÃâ´úÂëÖØ¸´¡£ÕâÊÇOpdykeºÍJohnsonËùÃèÊö¹ýµÄ¡°ÖØ·Ö½âÒÔÒ»°ã»¯¡±µÄÒ»¸öºÜºÃµÄÀý×Ó¡£Ê×ÏÈʶ±ðÏÖÓÐ ´úÂëÖеIJ»Í¬Ö®´¦£¬²¢ÇÒ½«²»Í¬Ö®´¦·ÖÀëΪеIJÙ×÷¡£×îºó£¬ÓÃÒ»¸öµ÷ÓÃÕâЩеIJÙ×÷µÄÄ£°å·½·¨À´Ìæ»»ÕâЩ²»Í¬µÄ´úÂë¡£

* ¿ØÖÆ×ÓÀàÀ©Õ¹¡£Ä£°å·½·¨Ö»ÔÚÌØ¶¨µãµ÷Óá°hook¡±²Ù×÷£¬ÕâÑù¾ÍÖ»ÔÊÐíÔÚÕâЩµã½øÐÐÀ©Õ¹¡£

½á¹¹

²ÎÓëÕߣº

* AbstractClass(³éÏóÀà,ÈçApplication)

¡ª ¶¨Òå³éÏóµÄÔ­Óï²Ù×÷(primitive operation),¾ßÌåµÄ×ÓÀà½«ÖØ¶¨ÒåËüÃÇÒÔʵÏÖÒ»¸öËã·¨µÄ¸÷²½Öè¡£

¡ª ʵÏÖÒ»¸öÄ£°å·½·¨ ,¶¨ÒåÒ»¸öËã·¨µÄ¹Ç¼Ü¡£¸ÃÄ£°å·½·¨²»½öµ÷ÓÃÔ­Óï²Ù×÷,Ò²µ÷Óö¨Òå ÔÚAbstractClass»òÆäËû¶ÔÏóÖеIJÙ×÷¡£

* ConcreteClass(¾ßÌåÀà,ÈçMyApplication)

¡ª ʵÏÖÔ­Óï²Ù×÷ÒÔÍê³ÉËã·¨ÖÐÓëÌØ¶¨×ÓÀàÏà¹ØµÄ²½Öè¡£

Àý×Ó

ÓÅȱµã

> Óŵ㣺

1. ·â×°²»±ä²¿·Ö£¬À©Õ¹¿É±ä²¿·Ö

°ÑÈÏΪÊDz»±ä²¿·ÖµÄËã·¨·â×°µ½¸¸ÀàʵÏÖ£¬¶ø¿É±ä²¿·ÖµÄÔò¿ÉÒÔͨ¹ý¼Ì³ÐÀ´¼ÌÐøÀ©Õ¹¡£ÔÚº·ÂíÄ£ÐÍÀý×ÓÖУ¬ÊDz»ÊǾͷdz£ÈÝÒ×À©Õ¹£¿ÀýÈçÔö¼ÓÒ»¸öH3Ðͺŵĺ·ÂíÄ£ÐÍ£¬ºÜÈÝÒ×ѽ£¬Ôö¼ÓÒ»¸ö×ÓÀ࣬ʵÏÖ¸¸ÀàµÄ»ù±¾·½·¨¾Í¿ÉÒÔÁË¡£

2. ÌáÈ¡¹«¹²²¿·Ö´úÂ룬±ãÓÚά»¤

ÎÒÃÇÀý×ÓÖиոÕ×ß¹ýµÄÍä·¾ÍÊÇ×îºÃµÄÖ¤Ã÷£¬Èç¹ûÎÒÃDz»³éÈ¡µ½¸¸ÀàÖУ¬ÈÎÓÉÕâÖÖÉ¢ÂҵĴúÂë·¢Éú£¬ÏëÏëºó¹ûÊÇʲôÑù×Ó£¿Î¬»¤ÈËԱΪÁËÐÞÕýÒ»¸öȱÏÝ£¬ÐèÒªµ½´¦²éÕÒÀàËÆµÄ´úÂ룡

3. ÐÐΪÓɸ¸Àà¿ØÖÆ£¬×ÓÀàʵÏÖ

»ù±¾·½·¨ÊÇÓÉ×ÓÀàʵÏֵģ¬Òò´Ë×ÓÀà¿ÉÒÔͨ¹ýÀ©Õ¹µÄ·½Ê½Ôö¼ÓÏàÓ¦µÄ¹¦ÄÜ£¬·ûºÏ¿ª±ÕÔ­Ôò¡£

> ȱµã£º

°´ÕÕÎÒÃǵÄÉè¼ÆÏ°¹ß£¬³éÏóÀฺÔðÉùÃ÷×î³éÏó¡¢×îÒ»°ãµÄÊÂÎïÊôÐԺͷ½·¨£¬ÊµÏÖÀàÍê³É¾ßÌåµÄÊÂÎïÊôÐԺͷ½·¨¡£µ«ÊÇÄ£°å·½·¨Ä£Ê½È´µßµ¹ÁË£¬³éÏóÀඨÒåÁ˲¿·Ö³éÏó·½·¨£¬ÓÉ×ÓÀàʵÏÖ£¬×ÓÀàÖ´ÐеĽá¹ûÓ°ÏìÁ˸¸ÀàµÄ½á¹û£¬Ò²¾ÍÊÇ×ÓÀà¶Ô¸¸Àà²úÉúÁËÓ°Ï죬ÕâÔÚ¸´ÔÓµÄÏîÄ¿ÖУ¬»á´øÀ´´úÂëÔĶÁµÄÄѶȣ¬¶øÇÒÒ²»áÈÃÐÂÊÖ²úÉú²»ÊʸС£

Visitor Pattern£¨·ÃÎÊÕßģʽ£©

Òâͼ

±íʾһ¸ö×÷ÓÃÓÚij¶ÔÏó½á¹¹Öеĸ÷ÔªËØµÄ²Ù×÷¡£ËüʹÄã¿ÉÒÔÔÚ²»¸Ä±ä¸÷ÔªËØµÄÀàµÄǰÌá϶¨Òå×÷ÓÃÓÚÕâÐ©ÔªËØµÄвÙ×÷¡£

ÊÊÓÃÐÔ

* Ò»¸ö¶ÔÏó½á¹¹°üº¬ºÜ¶àÀà¶ÔÏó£¬ËüÃÇÓв»Í¬µÄ½Ó¿Ú£¬¶øÄãÏë¶ÔÕâЩ¶ÔÏóʵʩһЩÒÀÀµÓÚÆä¾ßÌåÀàµÄ²Ù×÷¡£

* ÐèÒª¶ÔÒ»¸ö¶ÔÏó½á¹¹ÖеĶÔÏó½øÐкܶ಻ͬµÄ²¢ÇÒ²»Ïà¹ØµÄ²Ù×÷£¬¶øÄãÏë±ÜÃâÈÃÕâЩ²Ù×÷¡°ÎÛȾ¡±ÕâЩ¶ÔÏóµÄÀà¡£VisitorʹµÃÄã¿ÉÒÔ½«Ïà¹ØµÄ²Ù×÷¼¯ÖÐÆðÀ´¶¨ÒåÔÚÒ»¸öÀàÖС£µ±¸Ã¶ÔÏó½á¹¹±»ºÜ¶àÓ¦Óù²Ïíʱ£¬ÓÃVisitorģʽÈÃÿ¸öÓ¦Óýö°üº¬ÐèÒªÓõ½µÄ²Ù×÷¡£

* ¶¨Òå¶ÔÏó½á¹¹µÄÀàºÜÉٸı䣬µ«¾­³£ÐèÒªÔڴ˽ṹÉ϶¨ÒåеIJÙ×÷¡£¸Ä±ä¶ÔÏó½á¹¹ÀàÐèÒªÖØ¶¨Òå¶ÔËùÓзÃÎÊÕߵĽӿڣ¬Õâ¿ÉÄÜÐèÒªºÜ´óµÄ´ú¼Û¡£Èç¹û¶ÔÏó½á¹¹Àྭ³£¸Ä±ä£¬ÄÇô¿ÉÄÜ»¹ÊÇÔÚÕâЩÀàÖж¨ÒåÕâЩ²Ù×÷½ÏºÃ¡£

×ܽáһϣ¬ÔÚÕâÖֵط½ÄãÒ»¶¨Òª¿¼ÂÇʹÓ÷ÃÎÊÕßģʽ£ºÒµÎñ¹æÔòÒªÇó±éÀú¶à¸ö²»Í¬µÄ¶ÔÏó¡£Õâ±¾ÉíÒ²ÊÇ·ÃÎÊÕßģʽ³ö·¢µã£¬µü´úÆ÷ģʽֻÄÜ·ÃÎÊͬÀà»òͬ½Ó¿ÚµÄÊý¾Ý£¨µ±È»ÁË£¬Èç¹ûÄãʹÓÃinstanceof£¬ÄÇôÄÜ·ÃÎÊËùÓеÄÊý¾Ý£¬ÕâûÓÐÕùÂÛ£©£¬¶ø·ÃÎÊÕßģʽÊǶԵü´úÆ÷ģʽµÄÀ©³ä£¬¿ÉÒÔ±éÀú²»Í¬µÄ¶ÔÏó£¬È»ºóÖ´Ðв»Í¬µÄ²Ù×÷£¬Ò²¾ÍÊÇÕë¶Ô·ÃÎʵĶÔÏó²»Í¬£¬Ö´Ðв»Í¬µÄ²Ù×÷¡£

½á¹¹

²ÎÓëÕߣº

Visitor(·ÃÎÊÕß)

¡ª Ϊ¸Ã¶ÔÏó½á¹¹ÖÐ ConcreteElementµÄÿһ¸öÀàÉùÃ÷Ò»¸ö Visit²Ù×÷¡£¸Ã²Ù×÷µÄÃû×ÖºÍÌØ Õ÷±êʶÁË·¢ËÍ VisitÇëÇó¸ø¸Ã·ÃÎÊÕßµÄÄǸöÀà¡£ÕâʹµÃ·ÃÎÊÕß¿ÉÒÔÈ·¶¨Õý±»·ÃÎÊÔªËØ µÄ¾ßÌåµÄÀà¡£ÕâÑù·ÃÎÊÕ߾ͿÉÒÔͨ¹ý¸ÃÔªËØµÄÌØ¶¨½Ó¿ÚÖ±½Ó·ÃÎÊËü¡£

ConcreteVisitor(¾ßÌå·ÃÎÊÕß)

¡ª ʵÏÖÿ¸öÓÉ VisitorÉùÃ÷µÄ²Ù×÷¡£Ã¿¸ö²Ù×÷ʵÏÖ±¾Ëã·¨µÄÒ»²¿·Ö,¶ø¸ÃË㷨Ƭ¶ÏÄËÊǶÔÓ¦ÓڽṹÖжÔÏóµÄÀà¡£ConcreteVisitorΪ¸ÃËã·¨ÌṩÁËÉÏÏÂÎIJ¢´æ´¢ËüµÄ¾Ö²¿×´Ì¬¡£Õâһ״̬³£³£ÔÚ±éÀú¸Ã½á¹¹µÄ¹ý³ÌÖÐÀÛ»ý½á¹û¡£ ? Element(ÔªËØ,ÈçNode)

¡ª ¶¨ÒåÒ»¸öAccept²Ù×÷,ËüÒÔÒ»¸ö·ÃÎÊÕßΪ²ÎÊý¡£

ConcreteElement(¾ßÌåÔªËØ)

¡ª ʵÏÖAccept²Ù×÷,¸Ã²Ù×÷ÒÔÒ»¸ö·ÃÎÊÕßΪ²ÎÊý¡£

ObjectStructure(¶ÔÏó½á¹¹)

¡ª ÄÜö¾ÙËüµÄÔªËØ¡£

¡ª ¿ÉÒÔÌṩһ¸ö¸ß²ãµÄ½Ó¿ÚÒÔÔÊÐí¸Ã·ÃÎÊÕß·ÃÎÊËüµÄÔªËØ¡£

¡ª ¿ÉÒÔÊÇÒ»¸ö¸´ºÏ(²Î¼ûComposite×éºÏģʽ)»òÊÇÒ»¸ö¼¯ºÏ,ÈçÒ»¸öÁбí»òÒ»¸öÎÞÐò¼¯ºÏ¡£

Àý×Ó

ÁíÒ»¸öÀý×Ó£º

ÓÅȱµã

> Óŵ㣺

1. ·ÃÎÊÕßģʽʹµÃÒ×ÓÚÔö¼ÓеIJÙ×÷ ·ÃÎÊÕßʹµÃÔö¼ÓÒÀÀµÓÚ¸´ÔÓ¶ÔÏó½á¹¹µÄ¹¹¼þµÄ²Ù×÷±äµÃÈÝÒ×ÁË¡£½öÐèÔö¼ÓÒ»¸öеķÃÎÊÕß¼´¿ÉÔÚÒ»¸ö¶ÔÏó½á¹¹É϶¨ÒåÒ»¸öеIJÙ×÷¡£Ïà·´, Èç¹ûÿ¸ö¹¦Äܶ¼·ÖÉ¢ÔÚ¶à¸öÀàÖ®Éϵϰ,¶¨ÒåеIJÙ×÷ʱ±ØÐëÐÞ¸ÄÿһÀà¡£

2. ·ÃÎÊÕß¼¯ÖÐÏà¹ØµÄ²Ù×÷¶ø·ÖÀëÎ޹صIJÙ×÷ Ïà¹ØµÄÐÐΪ²»ÊÇ·Ö²¼ÔÚ¶¨Òå¸Ã¶ÔÏó½á¹¹µÄ ¸÷¸öÀàÉÏ,¶øÊǼ¯ÖÐÔÚÒ»¸ö·ÃÎÊÕßÖС£ÎÞ¹ØÐÐΪȴ±»·Ö±ð·ÅÔÚËüÃǸ÷×ԵķÃÎÊÕß×ÓÀàÖС£Õ⠾ͼȼò»¯ÁËÕâÐ©ÔªËØµÄÀà,Ò²¼ò»¯ÁËÔÚÕâЩ·ÃÎÊÕßÖж¨ÒåµÄËã·¨¡£ËùÓÐÓëËüµÄËã·¨Ïà¹ØµÄÊý ¾Ý½á¹¹¶¼¿ÉÒÔ±»Òþ²ØÔÚ·ÃÎÊÕßÖС£

> ȱµã£º

1. Ôö¼ÓÐ嵀 ConcreteElementÀàºÜÀ§ÄÑ

VisitorģʽʹµÃÄÑÒÔÔö¼ÓÐ嵀 ElementµÄ×ÓÀࡣÿ Ìí¼ÓÒ»¸öÐ嵀 ConcreteElement¶¼ÒªÔÚ VistorÖÐÌí¼ÓÒ»¸öеijéÏó²Ù×÷,²¢ÔÚÿһ¸ö ConcretVisitorÀàÖÐʵÏÖÏàÓ¦µÄ²Ù×÷¡£ÓÐʱ¿ÉÒÔÔÚ VisitorÖÐÌṩһ¸öȱʡµÄʵÏÖ,ÕâһʵÏÖ¿É ÒÔ±»´ó¶àÊýµÄ ConcreteVisitor¼Ì³Ð,µ«ÕâÓëÆä˵ÊÇÒ»¸ö¹æÂÉ»¹²»Èç˵ÊÇÒ»ÖÖÀýÍâ¡£

ËùÒÔÔÚÓ¦Ó÷ÃÎÊÕßģʽʱ¿¼ÂǹؼüµÄÎÊÌâÊÇϵͳµÄÄĸö²¿·Ö»á¾­³£±ä»¯,ÊÇ×÷ÓÃÓÚ¶ÔÏó½á¹¹ÉϵÄËã·¨ÄØ»¹Êǹ¹³É¸Ã½á¹¹µÄ¸÷¸ö¶ÔÏóµÄÀà¡£Èç¹ûÀÏÊÇÓÐÐ嵀 ConcretElementÀà¼ÓÈë½øÀ´µÄ»°, VistorÀà²ã´Î½«±äµÃÄÑÒÔά»¤¡£ÔÚÕâÖÖÇé¿öÏÂ,Ö±½ÓÔÚ¹¹³É¸Ã½á¹¹µÄÀàÖж¨ÒåÕâЩ²Ù×÷¿ÉÄܸüÈÝÒ×һЩ¡£Èç¹û ElementÀà²ã´ÎÊÇÎȶ¨µÄ,¶øÄã²»¶ÏµØÔö¼Ó²Ù×÷»ñÐÞ¸ÄËã·¨,·ÃÎÊÕßģʽ¿ÉÒÔ°ïÖúÄã¹ÜÀíÕâЩ¸Ä¶¯¡£

2. ÆÆ»µ·â×°

·ÃÎÊÕß·½·¨¼Ù¶¨ConcreteElement½Ó¿ÚµÄ¹¦ÄÜ×㹻ǿ,×ãÒÔÈ÷ÃÎÊÕß½øÐÐËü ÃǵŤ×÷¡£½á¹ûÊÇ,¸Ãģʽ³£³£ÆÈʹÄãÌṩ·ÃÎÊÔªËØÄÚ²¿×´Ì¬µÄ¹«¹²²Ù×÷,Õâ¿ÉÄÜ»áÆÆ»µËü µÄ·â×°ÐÔ¡£

 

   
2928 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ