3.3.3 Observer(¹Û²ìÕß)£ºÊÊÓÃÐÔÓë²ÎÓëÕßÊÊÓÃÐÔ£º
1£®µ±Ò»¸ö³éÏóÄ£ÐÍÓÐÁ½¸ö·½Ãæ, ÆäÖÐÒ»¸ö·½ÃæÒÀÀµÓÚÁíÒ»·½Ãæ¡£½«Õâ¶þÕß·â×°ÔÚ¶ÀÁ¢µÄ¶ÔÏóÖÐÒÔʹËüÃÇ¿ÉÒÔ¸÷×Ô¶ÀÁ¢µØ¸Ä±äºÍ¸´Óá£2£®µ±¶ÔÒ»¸ö¶ÔÏóµÄ¸Ä±äÐèҪͬʱ¸Ä±äÆäËü¶ÔÏó, ¶ø²»ÖªµÀ¾ßÌåÓжàÉÙ¶ÔÏóÓдý¸Ä±ä¡£3£®µ±Ò»¸ö¶ÔÏó±ØÐë֪ͨÆäËü¶ÔÏ󣬶øËüÓÖ²»Äܼٶ¨ÆäËü¶ÔÏóÊÇË¡£»»ÑÔÖ®, Ä㲻ϣÍûÕâЩ¶ÔÏóÊǽôÃÜñîºÏµÄ¡£²ÎÓëÕߣº? Subject(Ä¿±ê)
¡ªÄ¿±êÖªµÀËüµÄ¹Û²ìÕß¡£¿ÉÒÔÓÐÈÎÒâ¶à¸ö¹Û²ìÕß¹Û²ìͬһ¸öÄ¿±ê¡£¡ªÌṩע²áºÍɾ³ý¹Û²ìÕß¶ÔÏóµÄ½Ó¿Ú¡£
3.3.3ObserverģʽµÄUMLÀàͼ
12108ÁÐ6ÁÐÁÐ420ÐÐ 1ÐÐ 2ÐÐ 3ÐÐ 4 1 2 33.3.4 Template method(Ä£°å·½·¨)¡ª¶ÔÏóÐÐΪÐÍģʽ1. Òâͼ
¶¨ÒåÒ»¸ö²Ù×÷ÖеÄËã·¨µÄ¹Ç¼Ü,¶ø½«Ò»Ð©²½ÖèÑÓ³Ùµ½×ÓÀàÖС£Te m p l a t e M e t h o dʹµÃ×ÓÀà¿ÉÒÔ²»¸Ä±äÒ»¸öËã·¨µÄ½á¹¹¼´¿ÉÖØ¶¨Òå¸ÃËã·¨µÄÄ³Ð©ÌØ¶¨²½Öè¡£2. ¶¯»ú
¿¼ÂÇÒ»¸öÌṩA p p l i c a t i o nºÍD o c u m e n tÀàµÄÓ¦Óÿò¼Ü¡£A p p l i c a t i o nÀฺÔð´ò¿ªÒ»¸öÒÑÓеÄÒÔÍⲿÐÎʽ´æ´¢µÄÎĵµ,ÈçÒ»¸öÎļþ¡£Ò»µ©Ò»¸öÎĵµÖеÄÐÅÏ¢´Ó¸ÃÎļþÖжÁ³öºó,Ëü¾ÍÓÉÒ»¸öDocument¶ÔÏó±íʾ¡£
³éÏóµÄApplicationÀàÔÚËüµÄOpenDocument²Ù×÷Öж¨ÒåÁË´ò¿ªºÍ¶Áȡһ¸öÎĵµµÄÿһ¸öÖ÷Òª²½Öè¡£Ëü¼ì²é¸ÃÎĵµÊÇ·ñÄܱ»´ò¿ª,´´½¨ÓëÓ¦ÓÃÏà¹ØµÄD o c u m e n t¶ÔÏó,½«Ëü¼Óµ½ËüÈëµÄÎĵµ¼¯ºÏÖÐ,²¢ÇÒ´ÓÒ»¸öÎļþÖжÁÈ¡¸ÃDocument¡£ÎÒÃdzÆO p e n D o c u m e n tΪһ¸öÄ£°å·½·¨(template method)¡£Ò»¸öÄ£°å·½·¨ÓÃһЩ³éÏóµÄ²Ù×÷¶¨ÒåÒ»¸öËã·¨,¶ø×ÓÀà½«ÖØ¶¨ÒåÕâЩ
3.3.4 Template method£ºÊÊÓÃÐԺͲÎÓëÕß
ÊÊÓÃÐÔ:
? Ò»´ÎÐÔʵÏÖÒ»¸öËã·¨µÄ²»±äµÄ²¿·Ö,²¢½«¿É±äµÄÐÐΪÁô¸ø×ÓÀàÀ´ÊµÏÖ¡£
? ¸÷×ÓÀàÖй«¹²µÄÐÐΪӦ±»ÌáÈ¡³öÀ´²¢¼¯Öе½Ò»¸ö¹«¹²¸¸ÀàÖÐÒÔ±ÜÃâ´úÂëÖØ¸´¡£¼´¡°ÖØ·Ö½âÒÔÒ»°ã»¯¡±£¬Ê×ÏÈʶ±ðÏÖÓдúÂëÖеIJ»Í¬Ö®´¦£¬²¢ÇÒ½«²»Í¬Ö®´¦·ÖÀëΪеIJÙ×÷¡£×îºó£¬ÓÃÒ»¸öµ÷ÓÃÕâЩеIJÙ×÷µÄÄ£°å·½·¨À´Ìæ»»ÕâЩ²»Í¬µÄ´úÂë¡£
¡ñ¿ØÖÆ×ÓÀàÀ©Õ¹¡£Ä£°å·½·¨Ö»ÔÚÌØ¶¨µãµ÷Óá°Hook Method£¨¹³×Ó·½·¨£©¡±²Ù×÷£¬ÕâÑù¾ÍÖ»ÔÊÐíÔÚÕâЩµã½øÐÐÀ©Õ¹¡£
²ÎÓëÕߣº
? AbstractClass(³éÏóÀà,ÈçApplication)
¡ª¶¨Òå³éÏóµÄÔÓï²Ù×÷( primitive operation),¾ßÌåµÄ×ÓÀà½«ÖØ¶¨ÒåËüÃÇÒÔʵÏÖÒ»¸öËã·¨¡£
? ConcreteClass(¾ßÌåÀà,ÈçMyApplication)
¡ªÊµÏÖÔÓï²Ù×÷ÒÔÍê³ÉËã·¨ÖÐÓëÌØ¶¨×ÓÀàÏà¹ØµÄ²½Öè¡£