Type1 鎺ュ彛娉ㄥ叆
鎴戜滑甯稿父鍊熷姪鎺ュ彛鏉ュ皢璋冪敤鑰呬笌瀹炵幇鑰呭垎紱匯傚:
public class ClassA {
private InterfaceB clzB;
public doSomething() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
clzB.doIt();
}
鈥︹?BR> }
涓婇潰鐨勪唬鐮佷腑錛孋lassA渚濊禆浜嶪nterfaceB鐨勫疄鐜幫紝濡備綍鑾峰緱InterfaceB瀹炵幇綾葷殑瀹炰緥錛熶紶緇熺殑鏂規(guī)硶鏄湪
浠g爜涓垱寤篒nterfaceB瀹炵幇綾葷殑瀹炰緥錛屽茍灝嗚搗璧嬩簣clzB銆?BR>鑰岃繖鏍蜂竴鏉ワ紝ClassA鍦ㄧ紪璇戞湡鍗充緷璧栦簬InterfaceB鐨勫疄鐜般備負浜嗗皢璋冪敤鑰呬笌瀹炵幇鑰呭湪緙栬瘧鏈熷垎紱伙紝浜庢槸鏈?BR>浜嗕笂闈㈢殑浠g爜錛屾垜浠牴鎹鍏堝湪閰嶇疆鏂囦歡涓瀹氱殑瀹炵幇綾葷殑綾誨悕(Config.BImplementation)錛屽姩鎬?BR>鍔犺澆瀹炵幇綾伙紝騫墮氳繃InterfaceB寮哄埗杞瀷鍚庝負ClassA鎵鐢ㄣ傝繖灝辨槸鎺ュ彛娉ㄥ叆鐨勪竴涓渶鍘熷鐨勯洀褰€?BR>鑰屽浜庝竴涓猅ype1鍨婭OC瀹瑰櫒鑰岃█錛屽姞杞芥帴鍙e疄鐜板茍鍒涘緩鍏跺疄渚嬬殑宸ヤ綔鐢卞鍣ㄥ畬鎴愩?BR>濡備笅闈㈣繖涓被:
public class ClassA {
private InterfaceB clzB;
public Object doSomething(InterfaceB b) {
clzB = b;
return clzB.doIt();
}
鈥︹?BR> }
鍦ㄨ繍琛屾湡錛孖nterfaceB瀹炰緥灝嗙敱瀹瑰櫒鎻愪緵銆?BR>Type1鍨婭OC鍙戝睍杈冩棭錛堟湁鎰忔垨鏃犳剰錛夛紝鍦ㄥ疄闄呬腑寰楀埌浜嗘櫘閬嶅簲鐢紝鍗充嬌鍦↖OC鐨勬蹇靛皻鏈‘绔嬫椂錛岃繖鏍風殑
鏂規(guī)硶涔熷凡緇忛綣佸嚭鐜板湪鎴戜滑鐨勪唬鐮佷腑銆?BR>涓嬮潰鐨勪唬鐮佸ぇ瀹跺簲璇ラ潪甯哥啛鎮(zhèn)夛細
public class MyServlet extends HttpServlet {
public void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
鈥︹?BR> }
}
榪欎篃鏄竴涓猅ype1 鍨嬫敞鍏ワ紝HttpServletRequest鍜孒ttpServletResponse瀹炰緥鐢盨ervlet Container
鍦ㄨ繍琛屾湡鍔ㄦ佹敞鍏ャ?BR>鍙︼紝Apache Avalon鏄竴涓緝涓哄吀鍨嬬殑Type1鍨婭OC瀹瑰櫒銆?BR>
Type2 璁懼兼敞鍏?/STRONG>
鍦ㄥ悇縐嶇被鍨嬬殑渚濊禆娉ㄥ叆妯″紡涓紝璁懼兼敞鍏ユā寮忓湪瀹為檯寮鍙戜腑寰楀埌浜嗘渶騫挎硾鐨勫簲鐢紙鍏朵腑寰堝ぇ涓閮ㄥ垎寰?BR>鍔涗簬Spring妗嗘灦鐨勫獎鍝嶏級銆?BR>鍦ㄧ瑪鑰呯湅鏉ワ紝鍩轟簬璁劇疆妯″紡鐨勪緷璧栨敞鍏ユ満鍒舵洿鍔犵洿瑙傘佷篃鏇村姞鑷劧銆俀uick Start涓殑紺轟緥錛屽氨鏄吀
鍨嬬殑璁劇疆娉ㄥ叆錛屽嵆閫氳繃綾葷殑setter鏂規(guī)硶瀹屾垚渚濊禆鍏崇郴鐨勮緗?BR>
Type3 鏋勯犲瓙娉ㄥ叆
public class DIByConstructor {
private final DataSource dataSource;
private final String message;
public DIByConstructor(DataSource ds, String msg) {
this.dataSource = ds;
this.message = msg;
}
鈥︹?BR> }
鏋勯犲瓙娉ㄥ叆錛屽嵆閫氳繃鏋勯犲嚱鏁板畬鎴愪緷璧栧叧緋葷殑璁懼畾錛屽錛?BR>鍙互鐪嬪埌錛屽湪Type3綾誨瀷鐨勪緷璧栨敞鍏ユ満鍒朵腑錛屼緷璧栧叧緋繪槸閫氳繃綾繪瀯閫犲嚱鏁板緩绔嬶紝瀹瑰櫒閫氳繃璋冪敤綾葷殑鏋?BR>閫犳柟娉曪紝灝嗗叾鎵闇鐨勪緷璧栧叧緋繪敞鍏ュ叾涓?BR>PicoContainer錛堝彟涓縐嶅疄鐜頒簡渚濊禆娉ㄥ叆妯″紡鐨勮交閲忕駭瀹瑰櫒錛夐鍏堝疄鐜頒簡Type3綾誨瀷鐨勪緷璧栨敞鍏ユā寮忋?BR>
鍑犵渚濊禆娉ㄥ叆妯″紡鐨勫姣旀葷粨
鎺ュ彛娉ㄥ叆妯″紡鍥犱負鍘嗗彶杈冧負鎮(zhèn)犱箙錛屽湪寰堝瀹瑰櫒涓兘宸茬粡寰楀埌搴旂敤銆備絾鐢變簬鍏跺湪鐏墊椿鎬с佹槗鐢ㄦт笂涓嶅
鍏朵粬涓ょ娉ㄥ叆妯″紡錛屽洜鑰屽湪IOC鐨勪笓棰樹笘鐣屽唴騫朵笉琚湅濂姐?BR>Type2鍜孴ype3鍨嬬殑渚濊禆娉ㄥ叆瀹炵幇鍒欐槸鐩墠涓繪祦鐨処OC瀹炵幇妯″紡銆傝繖涓ょ瀹炵幇鏂瑰紡鍚勬湁鐗圭偣錛屼篃鍚勫叿
浼樺娍錛堜竴鍙ョ粡鍏稿簾璇滼錛夈?BR>
Type2 璁懼兼敞鍏ョ殑浼樺娍
1錛?瀵逛簬涔犳儻浜嗕紶緇烰avaBean寮鍙戠殑紼嬪簭鍛樿岃█錛岄氳繃setter鏂規(guī)硶璁懼畾渚濊禆鍏崇郴鏄懼緱鏇村姞鐩?BR>瑙傦紝鏇村姞鑷劧銆?BR>2錛?濡傛灉渚濊禆鍏崇郴錛堟垨緇ф壙鍏崇郴錛夎緝涓哄鏉傦紝閭d箞Type3妯″紡鐨勬瀯閫犲嚱鏁頒篃浼氱浉褰撳簽澶э紙鎴戜滑闇
瑕佸湪鏋勯犲嚱鏁頒腑璁懼畾鎵鏈変緷璧栧叧緋伙級錛屾鏃禩ype2妯″紡寰寰鏇翠負綆媧併?BR>3錛?瀵逛簬鏌愪簺絎笁鏂圭被搴撹岃█錛屽彲鑳借姹傛垜浠殑緇勪歡蹇呴』鎻愪緵涓涓粯璁ょ殑鏋勯犲嚱鏁幫紙濡係truts
涓殑Action錛夛紝姝ゆ椂Type3綾誨瀷鐨勪緷璧栨敞鍏ユ満鍒跺氨浣撶幇鍑哄叾灞闄愭э紝闅句互瀹屾垚鎴戜滑鏈熸湜鐨勫姛
鑳姐?BR>
Type3 鏋勯犲瓙娉ㄥ叆鐨勪紭鍔匡細
1錛?鈥滃湪鏋勯犳湡鍗沖垱寤轟竴涓畬鏁淬佸悎娉曠殑瀵硅薄鈥濓紝瀵逛簬榪欐潯Java璁捐鍘熷垯錛孴ype3鏃犵枒鏄渶濂界殑
鍝嶅簲鑰呫?BR>2錛?閬垮厤浜嗙箒鐞愮殑setter鏂規(guī)硶鐨勭紪鍐欙紝鎵鏈変緷璧栧叧緋誨潎鍦ㄦ瀯閫犲嚱鏁頒腑璁懼畾錛屼緷璧栧叧緋婚泦涓憟鐜幫紝
鏇村姞鏄撹銆?BR>3錛?鐢變簬娌℃湁setter鏂規(guī)硶錛屼緷璧栧叧緋誨湪鏋勯犳椂鐢卞鍣ㄤ竴嬈℃ц瀹氾紝鍥犳緇勪歡鍦ㄨ鍒涘緩涔嬪悗鍗沖浜?BR>鐩稿鈥滀笉鍙樷濈殑紼沖畾鐘舵侊紝鏃犻渶鎷呭績涓婂眰浠g爜鍦ㄨ皟鐢ㄨ繃紼嬩腑鎵цsetter鏂規(guī)硶瀵圭粍浠朵緷璧栧叧緋?BR>浜х敓鐮村潖錛岀壒鍒槸瀵逛簬Singleton妯″紡鐨勭粍浠惰岃█錛岃繖鍙兘瀵規(guī)暣涓郴緇熶駭鐢熼噸澶х殑褰卞搷銆?BR>4錛?鍚屾牱錛岀敱浜庡叧鑱斿叧緋諱粎鍦ㄦ瀯閫犲嚱鏁頒腑琛ㄨ揪錛屽彧鏈夌粍浠跺垱寤鴻呴渶瑕佸叧蹇冪粍浠跺唴閮ㄧ殑渚濊禆鍏崇郴銆?BR>瀵硅皟鐢ㄨ呰岃█錛岀粍浠朵腑鐨勪緷璧栧叧緋誨浜庨粦鐩掍箣涓傚涓婂眰灞忚斀涓嶅繀瑕佺殑淇℃伅錛屼篃涓虹郴緇熺殑
灞傛娓呮櫚鎬ф彁渚涗簡淇濊瘉銆?BR>5錛?閫氳繃鏋勯犲瓙娉ㄥ叆錛屾剰鍛崇潃鎴戜滑鍙互鍦ㄦ瀯閫犲嚱鏁頒腑鍐沖畾渚濊禆鍏崇郴鐨勬敞鍏ラ『搴忥紝瀵逛簬涓涓ぇ閲?BR>渚濊禆澶栭儴鏈嶅姟鐨勭粍浠惰岃█錛屼緷璧栧叧緋葷殑鑾峰緱欏哄簭鍙兘闈炲父閲嶈錛屾瘮濡傛煇涓緷璧栧叧緋繪敞鍏ョ殑
鍏堝喅鏉′歡鏄粍浠剁殑DataSource鍙婄浉鍏寵祫婧愬凡緇忚璁懼畾銆?BR>

]]>