×î½üÔÚÖØ¹¹ÖÐÓõ½ÁËÉè¼ÆÄ£Ê½ÖеĹ۲ìÕßģʽ£¬¼òµ¥µÄ¸ú´ó¼Ò·ÖÏíһϹ۲ìÕßģʽµÄÔÀíºÍʹÓó¡¾°¡£
ÔÚ½øÈëÕýÌâ֮ǰ£¬Ïȼòµ¥µÄ½éÉÜÒ»ÏÂÒµÎñ³¡¾°£¬½»Ò×ϵͳÖкÜÖØÒªµÄÒ»¸öÁ÷³Ì¾ÍÊǶ©µ¥×´Ì¬µÄÁ÷ת£¬Õâ´ÎÖØ¹¹µÄ¾ÍÊǶ©µ¥Íê³ÉµÄ²¿·Ö¡£

¶©µ¥Íê³ÉÖ®ºó£¬Òª×öºÜ¶àµÄºóÐø¹¤×÷£¬±ÈÈç֪ͨÓû§¡¢·¢Æð¼Æ·Ñ¡¢¿Ûµã¡¢Í¨ÖªÏà¹ØÏµÍ³µÈ¡£
ÖØ¹¹Ö®Ç°µÄ´úÂë½á¹¹ÈçÏ£º

ʾÀý´úÂ룺
class OrderMessageResolver
implements MessageResolver {
DeductSupport duductSupport;
ChargingSupport chargingSupport;
MQSender mqSender;
void resolve(){
...
finishOrder(); //Íê³É¶©µ¥
charge() //¼Æ·Ñ;
deduct() //¿Ûµã;
mqSender.send(); //·¢ÏûÏ¢
...
}
void finishOrder() {
...
}
void charge() {
...
chargingSupport.charge();
...
}
void deduct() {
...
deductSupport.doDeduct ();
...
}
void noticeUser() {
...
mqSender.send();
...
}
} |
ÕâÖֽṹÓм¸´óȱµã£º
µÚÒ»£¬resolve·½·¨ÀïÃæ×öÁËÌ«¶àµÄÂß¼£¬µ¼Ö´úÂëµÄ¿É¶ÁÐÔ¼«²î£¬Î¬»¤ÆðÀ´Ò²Ï൱Âé·³¡£
µÚ¶þ£¬ÓкܶàÂß¼²¢²»ÊÇOrderMessageResolverÕâ¸öÀàÓ¦¸Ã¸ºÔðµÄ£¬ÒѾ³¬¹ýÁËÕâ¸öÀàµÄÖ°Ôð£¬ÕâÓëÃæÏò¶ÔÏóµÄÉè¼ÆÀíÄîÊÇÏàÎ¥±³µÄ¡£
µÚÈý£¬ºÜÄÑÀ©Õ¹£¬Ëæ×ÅÒµÎñµÄ·¢Õ¹£¬¶©µ¥Íê³ÉÖ®ºó¿Ï¶¨»¹»áÓиü¹ýµÄ¶¯×÷£¬ºóÃæÔÚÌí¼ÓÒµÎñÂß¼µÄʱºò»á·Ç³£À§ÄÑ£¬¶ÔÕâ¸ö·½·¨µÄÐÞ¸ÄÒ²ÊÇÏ൱ΣÏյģ¬ÄãºÜÄÑÖªµÀÄãмӵÄÂß¼»á²»»á¶Ô֮ǰµÄÂß¼²úÉúÓ°Ï죬¶ÔÓڵĽ»Ò×ϵͳÀ´Ëµ£¬Ò»µ©²úÉúһЩÊý¾ÝÉϵÄÎó²î£¬ËðʧÊǷdz£²ÒÖØµÄ¡£
Õë¶ÔÒÔÉÏÕâЩÎÊÌ⣬ÒýÈë¹Û²ìÕßģʽ½â¾ö£¬¹Û²ìÕßģʽ¶¨ÒåÁËÒ»ÖÖÒ»¶Ô¶àµÄÒÀÀµ¹ØÏµ£¬Èöà¸ö¹Û²ìÕß¶ÔÏóͬʱ¼àÌýijһ¸öÖ÷Ìâ¶ÔÏó¡£Õâ¸öÖ÷Ìâ¶ÔÏóÔÚ״̬±ä»¯Ê±£¬»á֪ͨËùÓеĹ۲ìÕß¶ÔÏó£¬Ê¹ËûÃÇÄܹ»×Ô¶¯¸üÐÂ×Ô¼º£¬Ö÷ÌâÓë¹Û²ìÕßÖ®¼äÊÇÒ»ÖÖ·¢²¼-¶©ÔĵĹØÏµ¡£
ÏÂÃæÊÇJDK¶Ô¹Û²ìÕßģʽ֧³ÖµÄÀàͼ£º

ÔÚ±¾ÀýÖУ¬¶©µ¥µÄÍê³É״̬¾ÍÊDZ»¹Û²ìµÄÖ÷Ì⣬¶øÍê³ÉºóµÄ¸÷¸ö¶¯×÷¾ÍÊDz»Í¬µÄ¹Û²ìÕß¡£
ÖØ¹¹Ö®ºó£º

ʾÀý´úÂ룺
class OrderMessageResolver
extends Observable implements MessageResolver
{
void init() {
addObserver(); //³õʼ»¯Ìí¼Ó¹Û²ìÕß
}
void resolve() {
finishOrder(); //Íê³É¶©µ¥
notifyOvservers(); //֪ͨ¹Û²ìÕß
}
void finishOrder() {
...
}
//֪ͨ¸÷¸ö¹Û²ìÕß
void addObserver() {
addObserver(ChargingObserver);
addObserver(DeductObserver);
addObserver(NoticeUserObserver);
...
}
}
//¹Û²ìÕß»ùÀà
abstract class AbstractOrderFinishObserver implements
Observer {
void update(Observable, args) {
param = parse(args);
try {
update(param);
} catch(...) {
...
}
}
abstract void update(param);
}
//¿Ûµã¹Û²ìÕß
class DeductObserver extends AbstractOrderFinishObserver
{
DeductSupport duductSupport;
void update(param) {
...
deductSupport.doDeduct ();
...
}
}
//¼Æ·Ñ¹Û²ìÕß
class ChargingObserver extends AbstractOrderFinishObserver
{
ChargingSupport chargingSupport;
void update(param) {
...
chargingSupport.charge();
...
}
} |
ÔÚÖ÷Ìâ¶ÔÏó£¨OrderMessageResolver£©ÖÐÌí¼Ó¹Û²ìÕßÁÐ±í£¨ÕâÀïÖ»ÁгöÁ˼Ʒѡ¢¿ÛµãÁ½¸ö¹Û²ìÕߣ¬ÆäËûµÄÀàËÆ£¬Ôڴ˾Ͳ»Ò»Ò»ÁоÙÁË£©£¬¶©µ¥Íê³ÉÖ®ºó֪ͨ¸÷¸ö¹Û²ìÕß¡£JDK×Ô´ø¶Ô¹Û²ìÕßģʽµÄÖ§³Ö£¬±ÊÕßÓõľÍÊÇÕâ¸ö£¬ÔÀíºÍ´úÂë¶¼ºÜ¼òµ¥£¬´ó¼Ò¿ÉÒÔ×Ô¼ºÈ¥¿´Ô´Âë¡£
Õâ´ÎÖØ¹¹ÓÐʲôºÃ´¦ÄØ£¿Ê×ÏÈ£¬´úÂë½á¹¹ºÜÇåÎú£¬ÔÚ¶©µ¥Íê³É´¦ÀíÆ÷£¨OrderMessageResolver£©ÖУ¬¸üÐÂÍê¶©µ¥×´Ì¬¾ÍÒѾ½áÊøÁË£¬ºóÐøµÄÂß¼¶¼²»ÊÇËüµÄÖ°Ôð·¶Î§£¬Ö»ÐèÒª°Ñ¶©µ¥Íê³ÉµÄ״̬֪ͨ¸÷¸ö¹Û²ìÕߣ¬ÕâÑùÂß¼¾Í²»»áñîºÏÔÚÒ»Æð¡£Æä´Î£¬Öع¹ºóµÄ´úÂë¾ßÓÐÁ¼ºÃµÄÀ©Õ¹ÐÔ£¬ºóÐøÔÙÓж©µ¥Íê³ÉÖ®ºóµÄÒµÎñÂß¼Ö»ÐèÒªÌí¼ÓÒ»¸ö¹Û²ìÕߣ¬²»»á¶ÔÔÀ´µÄ´úÂëÓÐÈκεÄÈëÇÖ£¬ÕâÒ²·ûºÏOOPµÄÉè¼ÆÔÔò¡ª¡°¶ÔÀ©Õ¹¿ª·Å£¬¶ÔÐ޸Ĺرա±¡£
×îºó£¬Ð´Ò»µã×Ô¼ºµÄ´úÂë½á¹¹µÄ¿´·¨£¬×÷Ϊһ¸öÓÐÇ»µ÷µÄ¹¤³Ìʦ£¬ÎÒÃÇÒª°ÑÎÒÃÇд¹ýµÄ´úÂëµ±×öÒ»¼þÒÕÊõÆ·£¬²»Òª·Å¹ýÉÏÃæÈκεÄÒ»µã覴ã¬ÓС°´úÂë½àñ±¡±ÍêÈ«²»ÊÇÒ»¼þ»µÊ£¬ÔÚ×Ðϸµñ×ÁµÄ¹ý³ÌÖУ¬ÎÒÃÇ»áÓкܶàÊÕ»ñ£¬Ò²»áÈÃ×Ô¼º¸üºÃµÄ³É³¤¡£
|