ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产久一道中文一区,中文字幕电影在线,h视频在线免费http://www.aygfsteel.com/abin/category/52889.htmlzh-cnWed, 24 Oct 2012 10:17:23 GMTWed, 24 Oct 2012 10:17:23 GMT60- 深入‹¹…出java命ä×oæ¨¡å¼ http://www.aygfsteel.com/abin/archive/2012/10/24/390182.htmlabingabingWed, 24 Oct 2012 10:04:00 GMThttp://www.aygfsteel.com/abin/archive/2012/10/24/390182.htmlhttp://www.aygfsteel.com/abin/comments/390182.htmlhttp://www.aygfsteel.com/abin/archive/2012/10/24/390182.html#Feedback0http://www.aygfsteel.com/abin/comments/commentRss/390182.htmlhttp://www.aygfsteel.com/abin/services/trackbacks/390182.html一ã€å¼•a€
忙里å·é—²åQŒç»ˆäºŽåЍ½W”äº†ã€‚å‘½ä»¤æ¨¡å¼æ˜¯ä»Žç•Œé¢è®¾è®¡ä¸æå–出æ¥çš„一¿U分¼›»è€¦åˆåQŒæé«˜é‡ç”¨çš„æ–ÒŽ³•ã€‚è¢«è®¤äØ“æ˜¯æœ€ä¼˜é›…è€Œä¸”½Ž€å•的模å¼åQŒå®ƒçš„应用范围éžå¸¸å¹¿æ³›ã€‚让我们一èµäh¥è®¤è¯†ä¸‹å®ƒå§ã€?br />
先从èµähºè¯´è“vã€‚åœ¨è®¾è®¡ç•Œé¢æ—Óž¼Œå¤§å®¶å¯ä»¥æ³¨æ„到这æ ïLš„一¿Uæƒ…å†µï¼ŒåŒæ ·çš„èœå•控ä»Óž¼Œåœ¨ä¸åŒçš„应用环境ä¸çš„功能是完全ä¸åŒçš„åQ›è€Œèœå•选项的æŸä¸ªåŠŸèƒ½å¯èƒ½å’Œé¼ æ ‡å³é”®çš„æŸä¸ªåŠŸèƒ½å®Œå…¨ä¸€è‡´ã€‚æŒ‰ç…§æœ€å·®ã€æœ€åŽŸå§‹çš„è®¾è®¡ï¼Œ˜q™äº›ä¸åŒåŠŸèƒ½çš„èœå•ã€æˆ–者å³é”®å¼¹å‡ø™œå•是è¦åˆ†å¼€æ¥å®žçŽ°çš„åQŒä½ å¯ä»¥æƒŒ™±¡ä¸€ä¸‹ï¼Œword文档上é¢çš„一排èœå•è¦å®žçŽ°å‡ºå¤šž®‘个“形似¼œžéž”çš„èœå•ç±»æ¥ï¼Ÿ˜q™å®Œå…¨æ˜¯è¡Œä¸é€šçš„。这æ—Óž¼Œž®Þp¦˜q用分离å˜åŒ–与ä¸å˜çš„å› ç´ åQŒå°†èœå•触å‘的功能分¼›Õd‡ºæ¥ï¼Œè€Œåˆ¶ä½œèœå•çš„æ—¶å€™åªæ˜¯æä¾›ä¸€ä¸ªç»Ÿä¸€çš„è§¦å‘æŽ¥å£ã€‚è¿™æ ·ä¿®æ”¹è®¾è®¡åŽåQŒåŠŸèƒ½ç‚¹å¯ä»¥è¢«ä¸åŒçš„èœå•或者å³é”®é‡ç”¨ï¼›è€Œä¸”èœå•控äšg也å¯ä»¥å޻除å˜åŒ–å› ç´ ï¼Œå¾ˆå¤§çš„æé«˜äº†é‡ç”¨åQ›è€Œä¸”分离了显½Cºé€»è¾‘和业务逻辑的耦åˆã€‚这便是命ä×o模å¼çš„é›å½¢ã€?br />
䏋颿ˆ‘们ž®†ä»”¾l†çš„讨论下命令模å¼ã€?br />
二ã€å®šä¹‰ä¸Ž¾l“æž„
《设计模å¼ã€‹ä¸å‘½ä×o模å¼çš„å®šä¹‰äØ“åQšå°†ä¸€ä¸ªè¯·æ±‚å°è£…äØ“ä¸€ä¸ªå¯¹è±¡ï¼Œä»Žè€Œä‹Éä½ å¯ç”¨ä¸åŒçš„è¯äh±‚对客戯‚¿›è¡Œå‚数化åQ›å¯¹è¯äh±‚æŽ’é˜Ÿæˆ–è®°å½•è¯·æ±‚æ—¥å¿—ï¼Œä»¥åŠæ”¯æŒå¯æ’¤æ¶ˆçš„æ“ä½œã€?br />
看è“væ¥ï¼Œå‘½ä×o模å¼å¥½åƒ¼œžé€šå¹¿å¤§ã€‚其实命令模å¼çš„以上功能˜q˜è¦çœ‹ä½ 是怎么写的——½E‹åºæ€ÀL˜¯½E‹åºå‘˜å†™å‡ºæ¥çš„ï¼Œä½ å†™å•¥å®ƒæ‰èƒ½òq²å•¥åQšï¼‰
在我看æ¥åQŒå…¶å®žå‘½ä»¤æ¨¡å¼åƒå¾ˆå¤šè®¾è®¡æ¨¡å¼ä¸€æ ?#8212;—é€šè¿‡åœ¨ä½ çš„è¯·æ±‚å’Œå¤„ç†ä¹‹é—´åŠ ä¸Šäº†ä¸€ä¸ªä¸é—´äh的角è‰ÔŒ¼Œæ¥è¾¾åˆ°åˆ†¼›»è€¦åˆçš„目的。通过对ä¸é—´äh角色的特ŒDŠè®¾è®¡æ¥å½¢æˆä¸åŒçš„æ¨¡å¼ã€‚当然命令模å¼å°±æ˜¯ä¸€¿U特ŒDŠè®¾è®¡çš„¾l“æžœã€?br />
看下命ä×oæ¨¡å¼æ˜¯æœ‰å“ªäº›è§’色æ¥ç»„æˆçš„å§ã€?nbsp;
1) 命ä×o角色åQˆCommandåQ‰ï¼šå£°æ˜Žæ‰§è¡Œæ“作的接å£ã€‚有javaæŽ¥å£æˆ–者抽象类æ¥å®žçްã€?br />
2) 具体命ä×o角色åQˆConcrete CommandåQ‰ï¼šž®†ä¸€ä¸ªæŽ¥æ”¶è€…对象绑定于一个动作;调用接收者相应的æ“作åQŒä»¥å®žçް命ä×o角色声明的执行æ“作的接å£ã€?br />
3) 客户角色åQˆClientåQ‰ï¼šåˆ›å¾ä¸€ä¸ªå…·ä½“命令对象(òq¶å¯ä»¥è®¾å®šå®ƒçš„æŽ¥æ”¶è€…)ã€?br />
4) è¯äh±‚者角è‰ÔŒ¼ˆInvokeråQ‰ï¼šè°ƒç”¨å‘½ä×o对象执行˜q™ä¸ªè¯äh±‚ã€?br />
5) 接收者角è‰ÔŒ¼ˆReceiveråQ‰ï¼šçŸ¥é“如何实施与执行一个请求相关的æ“作。ä“Q何类都å¯èƒ½ä½œä¸ÞZ¸€ä¸ªæŽ¥æ”¶è€…ã€?br />
以下是命令模å¼çš„¾cÕd›¾åQŒä»Žä¸å¯ä»¥å¤§è‡´çš„了解到å„个角色之间是怎么æ¥å调工作的ã€?br />
三ã€ä‹Dä¾?br />
æœ¬æ¥æƒÏxŽ¥ç€æˆ‘çš„JUnitåˆ†æžæ¥è®²è§£å‘½ä»¤æ¨¡å¼ã€‚但是由于在JUnitä¸ï¼Œå‚æ‚了其它的模å¼åœ¨é‡Œé¢ï¼Œä½¿å¾—命ä×o模å¼çš„特点ä¸å¤ªæ˜Žæ˜¾ã€‚所以这里将以命令模å¼åœ¨Webå¼€å‘䏿œ€å¸¸è§çš„应ç”?#8212;—Strutsä¸Actionçš„ä‹É用作ä¸ÞZ¾‹åã€?br />
在Strutsä¸Action控制¾cÀL˜¯æ•´ä¸ªæ¡†æž¶çš„æ ¸å¿ƒï¼Œå®ƒè¿žæŽ¥ç€™åµé¢è¯äh±‚å’ŒåŽåîC¸šåŠ¡é€»è¾‘å¤„ç†ã€‚按照框架设计,æ¯ä¸€ä¸ªç‘ô承自Actionçš„å¾c»ï¼Œéƒ½å®žçްexecuteæ–ÒŽ³•——调用åŽå°çœŸæ£å¤„ç†ä¸šåŠ¡çš„å¯¹è±¡æ¥å®Œæˆä»ÕdŠ¡ã€?br />
注:¾l§æ‰¿è‡ªDispatchActionçš„å¾c»ï¼Œåˆ™å¯ä»¥ä¸€ä¸ªç±»é‡Œé¢å¤„ç†å¤šä¸ª¾cÖM¼¼çš„æ“ä½œã€‚è¿™ä¸ªåœ¨˜q™ä¸åšè®¨è®ºã€?br />
䏋颿ˆ‘们ž®†Strutsä¸çš„å„个¾cÖM¸Žå‘½ä×o模å¼ä¸çš„角色对å·å…¥åñ”ã€?br />
å…ˆæ¥çœ‹ä¸‹å‘½ä×o角色——Action控制¾c?br />
public class Action {
……
/*
*å¯ä»¥çœ‹å‡ºåQŒActionä¸æä¾›äº†ä¸¤ä¸ªç‰ˆæœ¬çš„æ‰§è¡ŒæŽ¥å£ï¼Œè€Œä¸”实现了默认的½Iºå®žçްã€?br />
*/
public ActionForward execute( ActionMapping mapping,
ActionForm form,
ServletRequest request,
ServletResponse response)
throws Exception {
try {
return execute(mapping, form, (HttpServletRequest) request,
(HttpServletResponse) response);
} catch (ClassCastException e) {
return null;
}
}
public ActionForward execute( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
return null;
}
}
下é¢çš„就是请求者角è‰ÔŒ¼Œå®ƒä»…仅负责调用命令角色执行æ“作ã€?br />
public class RequestProcessor {
……
protected ActionForward processActionPerform(HttpServletRequest request,
HttpServletResponse response,
Action action,
ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
try {
return (action.execute(mapping, form, request, response));
} catch (Exception e) {
return (processException(request, response,e, form, mapping));
}
}
}
Struts框架为我们æä¾›äº†ä»¥ä¸Šä¸¤ä¸ªè§’色åQŒè¦ä½¿ç”¨struts框架完æˆè‡ªå·±çš„业务逻辑åQŒå‰©ä¸‹çš„三个角色ž®Þp¦ç”±æˆ‘们自己æ¥å®žçŽ°äº†ã€‚æ¥éª¤å¦‚下:
1) 很明显我们è¦å…ˆå®žçŽîC¸€ä¸ªActionçš„å¾c»ï¼Œòq‰™‡å†™executeæ–ÒŽ³•ã€‚åœ¨æ¤æ–¹æ³•ä¸è°ƒç”¨ä¸šåŠ¡æ¨¡å—的相应对象æ¥å®Œæˆä»ÕdŠ¡ã€?br />
2) 实现处ç†ä¸šåŠ¡çš„ä¸šåŠ¡ç±»ã€?br />
3) é…ç½®struts-config.xmlé…置文äšgåQŒå°†è‡ªå·±çš„Actionå’ŒForm以åŠç›¸åº”™åµé¢¾l“åˆèµäh¥ã€?br />
4) ¾~–写jspåQŒåœ¨™åµé¢ä¸æ˜¾å¼çš„制定对应的处ç†Actionã€?br />
一个完整的命ä×o模弞®×ƒ»‹¾lå®Œäº†ã€‚å½“ä½ åœ¨™åµé¢ä¸Šæäº¤è¯·æ±‚åŽåQŒStrutsæ¡†æž¶ä¼šæ ¹æ®é…¾|®æ–‡ä»¶ä¸çš„定义,ž®†ä½ çš„Actionå¯¹è±¡ä½œäØ“å‚æ•°ä¼ 递给RequestProcessor¾cÖM¸çš„processActionPerform()æ–ÒŽ³•åQŒç”±æ¤æ–¹æ³•调用Action对象ä¸çš„æ‰§è¡Œæ–ÒŽ³•åQŒè¿›è€Œè°ƒç”¨ä¸šåС层ä¸çš„æŽ¥æ”¶è§’è‰²ã€‚è¿™æ ·å°±å®Œæˆäº†è¯·æ±‚的处ç†ã€?br />
å››ã€Undoã€äº‹åŠ¡åŠå»¶äŽ×
åœ¨å®šä¹‰ä¸æåˆ°åQŒå‘½ä»¤æ¨¡å¼æ”¯æŒå¯æ’¤é”€çš„æ“ä½œã€‚è€Œåœ¨ä¸Šé¢çš„ä‹D例ä¸òq¶æ²¡æœ‰ä½“现出æ¥ã€‚其实命令模å¼ä¹‹æ‰€ä»¥èƒ½å¤Ÿæ”¯æŒè¿™¿Uæ“作,完全得益于在è¯äh±‚è€…ä¸ŽæŽ¥æ”¶è€…ä¹‹é—´æ·»åŠ äº†ä¸é—´è§’è‰²ã€‚äØ“äº†å®žçŽ°undo功能åQŒé¦–先需è¦ä¸€ä¸ªåކå²åˆ—表æ¥ä¿å˜å·²ç»æ‰§è¡Œ˜q‡çš„具体命ä×o角色对象åQ›ä¿®æ”¹å…·ä½“命令角色ä¸çš„æ‰§è¡Œæ–¹æ³•,使它记录更多的执行细节,òq¶å°†è‡ªå·±æ”‘Ö…¥åކå²åˆ—表ä¸ï¼›òq¶åœ¨å…·ä½“命ä×oè§’è‰²ä¸æ·»åŠ undoæ–ÒŽ³•åQŒæ¤æ–ÒŽ³•æ ÒŽ®è®°å½•的执行细节æ¥å¤åŽŸçŠ¶æ€ï¼ˆå¾ˆæ˜Žæ˜¾ï¼Œé¦–å…ˆ½E‹åºå‘˜è¦æ¸…楚怎么æ¥å®žçŽŽÍ¼Œå› äØ“å®ƒå’Œexecute的效果是一æ ïLš„åQ‰ã€?br />
åŒæ ·åQŒredo功能也能够照æ¤å®žçްã€?br />
命ä×o模弘q˜æœ‰ä¸€ä¸ªå¸¸è§çš„用法ž®±æ˜¯æ‰§è¡Œäº‹åŠ¡æ“作。这ž®±æ˜¯ä¸ÞZ»€ä¹ˆå‘½ä»¤æ¨¡å¼è¿˜å«åšäº‹åŠ¡æ¨¡å¼çš„åŽŸå› å§ã€‚它å¯ä»¥åœ¨è¯·æ±‚è¢«ä¼ é€’åˆ°æŽ¥æ”¶è€…è§’è‰²ä¹‹å‰ï¼Œ‹‚€éªŒè¯·æ±‚çš„æ£ç¡®æ€§ï¼Œç”šè‡³å¯ä»¥‹‚€æŸ¥å’Œæ•°æ®åº“䏿•°æ®çš„一致性,而且å¯ä»¥¾l“刾l„åˆæ¨¡å¼çš„结构,æ¥ä¸€‹Æ¡æ‰§è¡Œå¤šä¸ªå‘½ä»¤ã€?br />
使用命ä×o模å¼ä¸ä»…ä»…å¯ä»¥è§£é™¤è¯·æ±‚者和接收者之间的耦åˆåQŒè€Œä¸”å¯ä»¥ç”¨æ¥åšæ‰¹å¤„ç†æ“作åQŒè¿™å®Œå…¨å¯ä»¥å‘æŒ¥ä½ è‡ªå·Þqš„æƒŒ™±¡——è¯äh±‚者å‘出的è¯äh±‚到达命ä×o角色˜q™é‡Œä»¥åŽåQŒå…ˆä¿å˜åœ¨ä¸€ä¸ªåˆ—表ä¸è€Œä¸æ‰§è¡ŒåQ›ç‰åˆîC¸€å®šçš„ä¸šåŠ¡éœ€è¦æ—¶åQŒå‘½ä»¤æ¨¡å¼å†ž®†åˆ—表ä¸å…¨éƒ¨çš„æ“ä½œé€ä¸€æ‰§è¡Œã€?br />
哦,命ä×o模å¼å®žåœ¨å¤ªçµ‹zÖMº†ã€‚真是一个很有用的东西啊åQ?br />
五ã€ä¼˜ç‚¹åŠé€‚用情况
ç”׃¸Šé¢çš„讲解å¯ä»¥çœ‹å‡ºå‘½ä×oæ¨¡å¼æœ‰ä»¥ä¸‹ä¼˜ç‚¹ï¼š
1) 命ä×o模弞®†è°ƒç”¨æ“作的è¯äh±‚对象与知é“如何实现该æ“作的接收对象解耦ã€?br />
2) 具体命ä×o角色å¯ä»¥è¢«ä¸åŒçš„è¯äh±‚者角色é‡ç”¨ã€?br />
3) ä½ å¯ž®†å¤šä¸ªå‘½ä»¤è£…é…æˆä¸€ä¸ªå¤åˆå‘½ä»¤ã€?br />
4) å¢žåŠ æ–°çš„å…·ä½“å‘½ä×oè§’è‰²å¾ˆå®¹æ˜“ï¼Œå› äØ“˜q™æ— 需改å˜å·²æœ‰çš„ç±»ã€?br />
GOFæ€È»“了命令模å¼çš„以下适用环境ã€?br />
1) éœ€è¦æŠ½è±¡å‡ºå¾…æ‰§è¡Œçš„åŠ¨ä½œåQŒç„¶åŽä»¥å‚æ•°çš„åÅžå¼æä¾›å‡ºæ?#8212;—¾cÖM¼¼äºŽè¿‡½E‹è®¾è®¡ä¸çš„å›žè°ƒæœºåˆ¶ã€‚è€Œå‘½ä»¤æ¨¡å¼æ£æ˜¯å›žè°ƒæœºåˆ¶çš„一个é¢å‘对象的替代å“ã€?br />
2) 在ä¸åŒçš„æ—¶åˆ»æŒ‡å®šã€æŽ’列和执行è¯äh±‚。一个命令对象å¯ä»¥æœ‰ä¸Žåˆå§‹è¯·æ±‚æ— å…³çš„ç”Ÿå˜æœŸã€?br />
3) éœ€è¦æ”¯æŒå–消æ“作ã€?br />
4) 支æŒä¿®æ”¹æ—¥å¿—åŠŸèƒ½ã€‚è¿™æ ·å½“¾pÈ»Ÿå´©æºƒæ—Óž¼Œ˜q™äº›ä¿®æ”¹å¯ä»¥è¢«é‡åšä¸€éã€?br />
5) éœ€è¦æ”¯æŒäº‹åŠ¡æ“作ã€?br />
å…ã€æ€È»“
命ä×oæ¨¡å¼æ˜¯ä¸€ä¸ªå¾ˆæœ‰ç”¨çš„æ¨¡å¼ï¼Œå¸Œæœ›˜q™ç¯‡æ–‡ç« èƒ½ç»™ä½ å®žè´¨æ€§çš„å¸®åŠ©ã€‚è°¢è°¢å¤§å®¶æŒ‡æ£ã€?nbsp;v

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
ÐËÒåÊÐ|
Â«É½ÏØ|
Íû¶¼ÏØ|
ÔÓ¶àÏØ|
ÉñÄ¾ÏØ|
ÎâÆìÏØ|
ÁÙÎ÷ÏØ|
ÏæÌ¶ÊÐ|
ÀñÈªÏØ|
ÄÏ·áÏØ|
¸ßÖÝÊÐ|
¿í³Ç|
±±°²ÊÐ|
´óÒ¦ÏØ|
º£Â×ÊÐ|
Ë·ÖÝÊÐ|
ð¢É½ÏØ|
аͶû»¢ÓÒÆì|
³¤ÀÖÊÐ|
Áø½ÏØ|
ÄÏ½ÏØ|
ÔÓ¶àÏØ|
ºÏ½ÏØ|
¹ðÑôÏØ|
¼ÃÑôÏØ|
Íû½ÏØ|
ÄôÀÄ¾ÏØ|
×ÓÖÞÏØ|
äÀ´¨ÏØ|
ÓÀ´ºÏØ|
ÐÂçÏØ|
Ìì¶ëÏØ|
ÌÀÔÏØ|
̨¶«ÊÐ|
Õ´»¯ÏØ|
ÓéÀÖ|
¾ÞÒ°ÏØ|
¶«·½ÊÐ|
ËÄ×ÓÍõÆì|
ºâÉ½ÏØ|
ÎäÂ¡ÏØ|