±¾ÎÄÊÇÉè¼ÆÄ£Ê½×ܽáµÄµÚ¶þƪ£ºÖ÷ÒªÏêϸ½²½âÁËÐÐΪÐÍÉè¼ÆÄ£Ê½£¬Ï£Íû¶Ô´ó¼ÒÓÐËù°ïÖú¡£
ÐÐΪÐÍÉè¼ÆÄ£Ê½£º
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½Ó¿ÚµÄ¹¦ÄÜ×㹻ǿ,×ãÒÔÈ÷ÃÎÊÕß½øÐÐËü ÃǵŤ×÷¡£½á¹ûÊÇ,¸Ãģʽ³£³£ÆÈʹÄãÌṩ·ÃÎÊÔªËØÄÚ²¿×´Ì¬µÄ¹«¹²²Ù×÷,Õâ¿ÉÄÜ»áÆÆ»µËü
µÄ·â×°ÐÔ¡£
|