Ò»¡¢¸ÅÄî
Ä£°å·½·¨Ä£Ê½ÊÇÀàµÄÐÐΪģʽ¡£×¼±¸Ò»¸ö³éÏóÀ࣬½«²¿·ÖÂß¼ÒÔ¾ßÌå·½·¨ÒÔ¼°¾ßÌå¹¹Ô캯ÊýµÄÐÎʽʵÏÖ£¬È»ºóÉùÃ÷һЩ³éÏó·½·¨À´ÆÈʹ×ÓÀàʵÏÖÊ£ÓàµÄÂß¼¡£²»Í¬µÄ×ÓÀà¿ÉÒÔÒÔ²»Í¬µÄ·½Ê½ÊµÏÖÕâЩ³éÏó·½·¨£¬´Ó¶ø¶ÔÊ£ÓàµÄÂß¼Óв»Í¬µÄʵÏÖ¡£Õâ¾ÍÊÇÄ£°å·½·¨Ä£Ê½µÄÓÃÒâ¡£
¶þ¡¢Ä£°å·½·¨Ä£Ê½µÄ½á¹¹
Ä£°å·½·¨Ä£Ê½ÊÇËùÓÐģʽÖÐ×îΪ³£¼ûµÄ¼¸¸öģʽ֮һ£¬ÊÇ»ùÓڼ̳еĴúÂ븴ÓõĻù±¾¼¼Êõ¡£
Ä£°å·½·¨Ä£Ê½ÐèÒª¿ª·¢³éÏóÀàºÍ¾ßÌå×ÓÀàµÄÉè¼ÆÊ¦Ö®¼äµÄÐ×÷¡£Ò»¸öÉè¼ÆÊ¦¸ºÔð¸ø³öÒ»¸öËã·¨µÄÂÖÀªºÍ¹Ç¼Ü£¬ÁíһЩÉè¼ÆÊ¦Ôò¸ºÔð¸ø³öÕâ¸öËã·¨µÄ¸÷¸öÂß¼²½Öè¡£´ú±íÕâЩ¾ßÌåÂß¼²½ÖèµÄ·½·¨³Æ×ö»ù±¾·½·¨(primitive method)£»¶ø½«ÕâЩ»ù±¾·½·¨»ã×ÜÆðÀ´µÄ·½·¨½Ð×öÄ£°å·½·¨(template method)£¬Õâ¸öÉè¼ÆÄ£Ê½µÄÃû×Ö¾ÍÊǴӴ˶øÀ´¡£
Ä£°å·½·¨Ëù´ú±íµÄÐÐΪ³ÆÎª¶¥¼¶ÐÐΪ£¬ÆäÂß¼³ÆÎª¶¥¼¶Âß¼¡£Ä£°å·½·¨Ä£Ê½µÄ¾²Ì¬½á¹¹Í¼ÈçÏÂËùʾ£º
vcfJq6O6PC9oMz4KPHA+ICAgICAgILPpz/PEo7DlKEFic3RyYWN0IFRlbXBsYXRlKb3HyavT0Mjnz8LU8MjOo7o8L3A+CjxwPqGhoaGh9qGhoaG2qNLlwcvSu7j2u/K24Lj2s+nP87LZ1/ejrNLUsePIw9fTwODKtc/WoaPV4tCps+nP87LZ1/e90Nf2u/mxvrLZ1/ejrMv8w8fKx9K7uPa2pby2wt+8rbXE1+mzybK91uihozwvcD4KPHA+oaGhoaH2oaGhobao0uWyosq1z9bBy9K7uPbEo7Dlt723qKGj1eK49sSjsOW3vbeo0ruw48rH0ru49r7fzOW3vbeoo6zL/Lj4s/bBy9K7uPa2pby2wt+8rbXEuce83KOstvjC37yttcTX6bPJsr3W6NTaz+DTprXEs+nP87LZ1/fW0KOszcaz2bW919PA4Mq1z9aho7alvLbC37yt0rLT0L/JxNy199PD0rvQqb7fzOW3vbeooaM8YnI+Cjxicj4KoaGhob7fzOXEo7DlKENvbmNyZXRlIFRlbXBsYXRlKb3HyavT1sjnz8LU8MjOo7o8L3A+CjxwPqGhoaGh9qGhoaHKtc/WuLjA4Mv5tqjS5bXE0ru49rvytuC49rPpz/O3vbeoo6zL/MPHysfSu7j2tqW8tsLfvK21xNfps8myvdbooaM8L3A+CjxwPqGhoaGh9qGhoaHDv9K7uPaz6c/zxKOw5b3Hyau2vL/J0tTT0MjO0uK24Lj2vt/M5cSjsOW9x8mr0+vWrrbU06ajrLb4w7/Su7j2vt/M5cSjsOW9x8mrtry/ydLUuPiz9tXi0Kmz6c/zt723qKOo0rK+zcrHtqW8tsLfvK21xNfps8myvdboo6m1xLK7zazKtc/Wo6y007b4yrm1w7alvLbC37yttcTKtc/WuPeyu8/gzayhozwvcD4KPHA+ICAgICAgINS0tPrC6zwvcD4KPHA+ICAgICAgILPpz/PEo7DlvcfJq8Dgo6xhYnN0cmFjdE1ldGhvZCgpoaJob29rTWV0aG9kKCm1yLv5sb63vbeoyse2pby2wt+8rbXE1+mzybK91uijrNXiuPa2pby2wt+8rdPJdGVtcGxhdGVNZXRob2QoKbe9t6i0+rHtoaM8YnI+CjwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">public abstract class AbstractTemplate { /** * Ä£°å·½·¨ */ public void templateMethod(){ //µ÷Óûù±¾·½·¨ abstractMethod(); hookMethod(); concreteMethod(); } /** * »ù±¾·½·¨µÄÉùÃ÷£¨ÓÉ×ÓÀàʵÏÖ£© */ protected abstract void abstractMethod(); /** * »ù±¾·½·¨(¿Õ·½·¨) */ protected void hookMethod(){} /** * »ù±¾·½·¨£¨ÒѾʵÏÖ£© */ private final void concreteMethod(){ //ÒµÎñÏà¹ØµÄ´úÂë } }¾ßÌåÄ£°å½ÇÉ«À࣬ʵÏÖÁ˸¸ÀàËùÉùÃ÷µÄ»ù±¾·½·¨£¬abstractMethod()·½·¨Ëù´ú±íµÄ¾ÍÊÇÇ¿ÖÆ×ÓÀàʵÏÖµÄÊ£ÓàÂß¼£¬¶øhookMethod()·½·¨ÊÇ¿ÉÑ¡ÔñʵÏÖµÄÂß¼£¬²»ÊDZØÐëʵÏֵġ£
public class ConcreteTemplate extends AbstractTemplate{
//»ù±¾·½·¨µÄʵÏÖ
@Override
public void abstractMethod() {
//ÒµÎñÏà¹ØµÄ´úÂë
}
//ÖØÐ´¸¸ÀàµÄ·½·¨
@Override
public void hookMethod() {
//ÒµÎñÏà¹ØµÄ´úÂë
}
}Ä£°åģʽµÄ¹Ø¼üÊÇ£º×ÓÀà¿ÉÒÔÖû»µô¸¸ÀàµÄ¿É±ä²¿·Ö£¬µ«ÊÇ×ÓÀàÈ´²»¿ÉÒԸıäÄ£°å·½·¨Ëù´ú±íµÄ¶¥¼¶Âß¼¡£
ÿµ±¶¨ÒåÒ»¸öеÄ×ÓÀàʱ£¬²»Òª°´ÕÕ¿ØÖÆÁ÷³ÌµÄ˼·ȥÏ룬¶øÓ¦µ±°´ÕÕ¡°ÔðÈΡ±µÄ˼·ȥÏë¡£»»ÑÔÖ®£¬Ó¦µ±¿¼ÂÇÄÄЩ²Ù×÷ÊDZØÐëÖû»µôµÄ£¬ÄÄЩ²Ù×÷ÊÇ¿ÉÒÔÖû»µôµÄ£¬ÒÔ¼°ÄÄЩ²Ù×÷ÊDz»¿ÉÒÔÖû»µôµÄ¡£Ê¹ÓÃÄ£°åģʽ¿ÉÒÔʹÕâЩÔðÈαäµÃÇåÎú¡£
Èý¡¢Ä£°å·½·¨Ä£Ê½Öеķ½·¨
Ä£°å·½·¨Öеķ½·¨¿ÉÒÔ·ÖΪÁ½´óÀࣺģ°å·½·¨ºÍ»ù±¾·½·¨¡£
1. Ä£°å·½·¨
¡¡¡¡Ò»¸öÄ£°å·½·¨ÊǶ¨ÒåÔÚ³éÏóÀàÖеģ¬°Ñ»ù±¾²Ù×÷·½·¨×éºÏÔÚÒ»ÆðÐγÉÒ»¸ö×ÜËã·¨»òÒ»¸ö×ÜÐÐΪµÄ·½·¨¡£Ò»¸ö³éÏóÀà¿ÉÒÔÓÐÈÎÒâ¶à¸öÄ£°å·½·¨£¬¶ø²»ÏÞÓÚÒ»¸ö¡£Ã¿Ò»¸öÄ£°å·½·¨¶¼¿ÉÒÔµ÷ÓÃÈÎÒâ¶à¸ö¾ßÌå·½·¨¡£
2. »ù±¾·½·¨
»ù±¾·½·¨ÓÖ¿ÉÒÔ·ÖΪÈýÖÖ£º³éÏó·½·¨(Abstract Method)¡¢¾ßÌå·½·¨(Concrete Method)ºÍ¹³×Ó·½·¨(Hook Method)¡£
¡¡¡¡¡ñ ³éÏó·½·¨£ºÒ»¸ö³éÏó·½·¨ÓɳéÏóÀàÉùÃ÷£¬ÓɾßÌå×ÓÀàʵÏÖ¡£ÔÚJavaÓïÑÔÀï³éÏó·½·¨ÒÔabstract¹Ø¼ü×Ö±êʾ¡£
¡¡¡¡¡ñ¾ßÌå·½·¨£ºÒ»¸ö¾ßÌå·½·¨ÓɳéÏóÀàÉùÃ÷²¢ÊµÏÖ£¬¶ø×ÓÀಢ²»ÊµÏÖ»òÖû»¡£
¡¡¡¡¡ñ¹³×Ó·½·¨£ºÒ»¸ö¹³×Ó·½·¨ÓɳéÏóÀàÉùÃ÷²¢ÊµÏÖ£¬¶ø×ÓÀà»á¼ÓÒÔÀ©Õ¹¡£Í¨³£³éÏóÀà¸ø³öµÄʵÏÖÊÇÒ»¸ö¿ÕʵÏÖ£¬×÷Ϊ·½·¨µÄĬÈÏʵÏÖ¡£
ÔÚÉÏÃæµÄÀý×ÓÖУ¬AbstractTemplateÊÇÒ»¸ö³éÏóÀ࣬Ëü´øÓÐÈý¸ö·½·¨¡£ÆäÖÐabstractMethod()ÊÇÒ»¸ö³éÏó·½·¨£¬ËüÓɳéÏóÀàÉùÃ÷Ϊ³éÏó·½·¨£¬²¢ÓÉ×ÓÀàʵÏÖ£»hookMethod()ÊÇÒ»¸ö¹³×Ó·½·¨£¬ËüÓɳéÏóÀàÉùÃ÷²¢ÌṩĬÈÏʵÏÖ£¬²¢ÇÒÓÉ×ÓÀàÖû»µô¡£concreteMethod()ÊÇÒ»¸ö¾ßÌå·½·¨£¬ËüÓɳéÏóÀàÉùÃ÷²¢ÊµÏÖ¡£
3. ĬÈϹ³×Ó·½·¨
Ò»¸ö¹³×Ó·½·¨³£³£ÓɳéÏóÀà¸ø³öÒ»¸ö¿ÕʵÏÖ×÷Ϊ´Ë·½·¨µÄĬÈÏʵÏÖ¡£ÕâÖֿյĹ³×Ó·½·¨½Ð×ö¡°Do Nothing Hook¡±¡£ÏÔÈ»£¬ÕâÖÖĬÈϹ³×Ó·½·¨ÔÚȱʡÊÊÅäģʽÀïÃæÒѾ¼û¹ýÁË£¬Ò»¸öȱʡÊÊÅäģʽ½²µÄÊÇÒ»¸öÀàΪһ¸ö½Ó¿ÚÌṩһ¸öĬÈϵĿÕʵÏÖ£¬´Ó¶øÊ¹µÃȱʡÊÊÅäÀàµÄ×ÓÀ಻±ØÏñʵÏÖ½Ó¿ÚÄÇÑù±ØÐë¸ø³öËùÓз½·¨µÄʵÏÖ£¬ÒòΪͨ³£Ò»¸ö¾ßÌåÀಢ²»ÐèÒªËùÓеķ½·¨¡£
4. ÃüÃû¹æÔò
¡¡¡¡ÃüÃû¹æÔòÊÇÉè¼Æ