23绉嶈璁℃ā寮忥紙四锛夛細妯℃澘妯″紡
1 杈夌厡宸ョ▼鈥斺€斿埗閫犳倣椹?/span>
聽鍛ㄤ笁锛?:00锛屾垜鍒氬垰鍧愬埌浣嶇疆涓婏紝鎵撳紑鐢佃剳鍑嗗寮€濮嬪共娲汇€?/p>
鈥滃皬涓夛紝灏忎笁锛屽彨涓€涓嬪叾浠栧悓浜嬶紝鍒颁細璁寮€浼氣€濓紝鑰佸ぇ璺戣繃鏉ュ惣锛屽甫鐫€鍧忕瑧銆傝繕娌$瓑澶у鍧愮ǔ锛岃€佸ぇ灏卞紑璁蹭簡锛?br>鈥滃憡璇夊ぇ瀹朵竴涓ソ娑堟伅锛屾槰澶╃粓浜庢妸脳脳妯″瀷鍏徃鐨勫彛瀛愭墦寮€浜嗭紝瑕佹垜浠仛鎮嶉┈妯″瀷锛岃櫧鐒舵槸绗竴涓溅杈嗘ā鍨嬶紝浣嗘槸鎴戜滑鏈夎兘鍔涖€佹湁淇″績鍋氬ソ锛屾垜浠竴瀹氳鈥︹€︹€濓紙涓棿鐪佺暐20鍒嗛挓鐨勮璇濓紝濡傛灉浣犲惉杩囬瀵间汉鐨勮璇濓紝杩欎釜浣犲簲璇ヨ兘澶熺画涓婏級
鍔ㄥ憳宸ヤ綔鍋氬畬浜嗭紝閭e氨寮€濮嬪帇浠诲姟浜嗐€傗€滆繖娆℃椂闂存槸闈炲父绱у紶鐨勶紝鍙湁涓€涓槦鏈熺殑鏃堕棿锛屽皬涓夛紝浣犺礋璐e湪涓€涓槦鏈熺殑鏃堕棿鎶婅繖鎵?0涓囪溅妯★紙娉細杞︽ā鏄溅杈嗘ā鍨嬬殑鎰忔€濓紝涓嶆槸棣欒溅缇庡コ閭d釜杞︽ā锛夊缓璁惧畬鎴愨€︹€︹€?br>鈥滀竴涓槦鏈燂紵杩欎釜鈥︹€︽槸鐪熷仛涓嶅畬锛岃鍋氬垎鏋愶紝鍋氭ā鏉匡紝鍋?a class="replace_word" href="http://lib.****.net/base/softwaretest" title="杞欢娴嬭瘯鐭ヨ瘑搴? style="color: #df3434; font-weight: bold;" target="_blank">娴嬭瘯锛岃繕瑕佽€冭檻鎵╁睍鎬с€佺ǔ瀹氭€с€佸仴澹€х瓑锛屾椂闂村疄鍦ㄦ槸澶皯浜嗐€傗€濊繕娌$瓑鑰佸ぇ璇村畬锛屾垜灏辨€ヤ簡锛屽啀涓嶆€ユ垜鐨勫皬鍛藉氨鎶樺湪涓婇潰浜嗭紒
鈥滈偅杩欐牱锛屽彧鍋氭渶鍩烘湰鐨勫疄鐜帮紝涓嶈€冭檻澶鐨勯棶棰橈紝鎬庝箞鏍凤紵鈥濊€佸ぇ鍙堟妸鎴戝脊鍥炲幓浜嗐€?br>鈥滃彧浣滃熀鏈疄鐜帮紵閭b€︹€︹€?br>鍞夛紝棰嗗宸茬粡甯冪疆浠诲姟浜嗭紝閭e氨寮€濮嬫嫾鍛藉湴鍋氬惂銆傜劧鍚庡氨寮€濮嬪噯澶囧姩鎵嬪仛锛屽湪鍋氫箣鍓嶅厛浠嬬粛涓€涓嬫垜浠叕鍙哥殑鑳屾櫙锛屾垜浠叕鍙告槸鍋氭ā鍨嬬敓浜х殑锛屽仛杩囨ˉ姊佹ā鍨嬨€佸缓绛戞ā鍨嬨€佹満姊版ā
鍨嬶紝鐢氳嚦鏄竴浜涙斂搴溿€佸啗浜嬬殑鏈哄瘑妯″瀷锛岃繖涓笉鑳界粏璇达紝缁濆瘑銆傚叕鍙哥殑涓昏涓氬姟灏辨槸鎶婂疄鐗╂寜鐓т竴瀹氱殑姣斾緥缂╁皬鎴栨斁澶э紝鐢ㄤ簬璇曢獙銆佸垎鏋愩€侀噺鍖栨垨鑰呮槸閿€鍞紝绛夌瓑锛屼笂闈㈡彁鍒扮殑脳脳妯″瀷
鍏徃鏄笓闂ㄩ攢鍞溅杈嗘ā鍨嬬殑鍏徃锛岃嚜宸辨病鏈夌敓浜т紒涓氾紝鍏ㄩ儴鏄唬宸ャ€傛垜浠叕鍙告槸绗竴娆′粠脳脳妯″瀷鍏徃鎺ュ崟锛岄偅鎴戞€庝箞鐫€涔熻鎶婃椿骞插ソ锛屽彲鏃堕棿鏈夐檺锛屼换鍔¢噺鍙堝法澶э紝鎬庝箞鍔烇紵
鏃㈢劧棰嗗閮借浜嗭紝涓嶈€冭檻鎵╁睍鎬э紝閭eソ鍔烇紝鍏堟寜鐓ф渶涓€鑸殑缁忛獙璁捐绫诲浘锛屽涓嬪浘鎵€绀?
聽
聽闈炲父绠€鍗曠殑瀹炵幇锛屾倣椹溅鏈変袱涓瀷鍙凤紝H1鍜孒2銆傛寜鐓ч渶姹傦紝鍙渶瑕佹倣椹ā鍨嬶紝閭eソ鎴戝氨缁欎綘鎮嶉┈妯″瀷锛屽厛鍐欎釜鎶借薄绫伙紝鐒跺悗涓や釜涓嶅悓鍨嬪彿鐨勬ā鍨嬪疄鐜扮被锛岄€氳繃绠€鍗曠殑缁ф壙灏卞彲浠?/p>
瀹炵幇涓氬姟瑕佹眰銆傛垜浠厛浠庢娊璞$被寮€濮嬬紪鍐欙紝鎶借薄鎮嶉┈妯″瀷濡備唬鐮佹竻鍗曞涓嬫墍绀恒€?/p>
1 public abstract class HummerModel { 2 3 /* 4 * 棣栧厛锛岃繖涓ā鍨嬭鑳藉琚彂鍔ㄨ捣鏉ワ紝鍒鏄墜鎽囧彂鍔紝杩樻槸鐢靛姏鍙戝姩锛屽弽姝? 5 * 鏄鑳藉鍙戝姩璧锋潵锛岄偅杩欎釜瀹炵幇瑕佸湪瀹炵幇绫婚噷浜? 6 */ 7 public abstract void start(); 8 9 //鑳藉彂鍔紝閭h繕瑕佽兘鍋滀笅鏉ワ紝閭f墠鏄湡鏈簨 10 public abstract void stop(); 11 12 //鍠囧彮浼氬嚭澹伴煶锛屾槸婊存淮鍙紝杩樻槸鍝斿摂鍙?/span> 13 public abstract void alarm(); 14 15 //寮曟搸浼氳桨闅嗛殕鐨勫搷锛屼笉鍝嶉偅鏄亣鐨?/span> 16 public abstract void engineBoom(); 17 18 //閭fā鍨嬪簲璇ヤ細璺戝惂锛屽埆绠℃槸浜烘帹鐨勶紝杩樻槸鐢靛姏椹卞姩锛屾€讳箣瑕佷細璺?/span> 19 public abstract void run(); 20 21 }
聽
鍦ㄦ娊璞$被涓紝鎴戜滑瀹氫箟浜嗘倣椹ā鍨嬮兘蹇呴』鍏锋湁鐨勭壒璐細鑳藉鍙戝姩銆佸仠姝紝鍠囧彮浼氬搷锛屽紩鎿庡彲浠ヨ桨楦o紝鑰屼笖杩樺彲浠ュ仠姝€備絾鏄瘡涓瀷鍙风殑鎮嶉┈瀹炵幇鏄笉鍚岀殑锛孒1鍨嬪彿鐨勬倣椹浠g爜
娓呭崟濡備笅鎵€绀恒€?/p>
1 public class HummerH1Model extends HummerModel { 2 //H1鍨嬪彿鐨勬倣椹溅楦g瑳 3 public void alarm() { 4 System.out.println("鎮嶉┈H1楦g瑳..."); 5 } 6 7 //寮曟搸杞伴福澹?/span> 8 public void engineBoom() { 9 System.out.println("鎮嶉┈H1寮曟搸澹伴煶鏄繖鏍峰湪..."); 10 } 11 12 //姹借溅鍙戝姩 13 public void start() { 14 System.out.println("鎮嶉┈H1鍙戝姩..."); 15 } 16 17 //鍋滆溅 18 public void stop() { 19 System.out.println("鎮嶉┈H1鍋滆溅..."); 20 } 21 22 //寮€鍔ㄨ捣鏉?/span> 23 public void run(){ 24 25 //鍏堝彂鍔ㄦ苯杞?/span> 26 this.start(); 27 28 //寮曟搸寮€濮嬭桨楦?/span> 29 this.engineBoom(); 30 31 //鐒跺悗灏卞紑濮嬭窇浜嗭紝璺戠殑杩囩▼涓亣鍒颁竴鏉$嫍鎸¤矾锛屽氨鎸夊枃鍙?/span> 32 this.alarm(); 33 34 //鍒拌揪鐩殑鍦板氨鍋滆溅 35 this.stop(); 36 37 } 38 39 }
聽
聽
澶у娉ㄦ剰鐪媟un()鏂规硶锛岃繖鏄竴涓眹鎬荤殑鏂规硶锛屼竴涓ā鍨嬬敓浜ф垚鍔熶簡锛屾€昏鎷跨粰瀹㈡埛妫€娴嬪惂锛屾€庝箞妫€娴嬶紵鈥滄槸楠″瓙鏄┈锛屾媺鍑哄幓婧滄簻鈥濓紝杩欏氨鏄竴绉嶆楠屾柟娉曪紝璁╁畠璺戣捣鏉ワ紒閫氳繃run()
杩欐牱鐨勬柟娉曪紝鎶婃ā鍨嬬殑鎵€鏈夊姛鑳介兘娴嬭瘯鍒颁簡銆?br>H2鍨嬪彿鎮嶉┈濡備唬鐮佹竻鍗曞涓嬫墍绀?
1 public class HummerH2Model extends HummerModel { 2 //H2鍨嬪彿鐨勬倣椹溅楦g瑳 3 public void alarm() { 4 System.out.println("鎮嶉┈H2楦g瑳..."); 5 } 6 7 //寮曟搸杞伴福澹?/span> 8 public void engineBoom() { 9 System.out.println("鎮嶉┈H2寮曟搸澹伴煶鏄繖鏍峰湪..."); 10 } 11 12 //姹借溅鍙戝姩 13 public void start() { 14 System.out.println("鎮嶉┈H2鍙戝姩..."); 15 } 16 17 //鍋滆溅 18 public void stop() { 19 System.out.println("鎮嶉┈H2鍋滆溅..."); 20 } 21 22 //寮€鍔ㄨ捣鏉?/span> 23 public void run(){ 24 25 //鍏堝彂鍔ㄦ苯杞?/span> 26 this.start(); 27 28 //寮曟搸寮€濮嬭桨楦?/span> 29 this.engineBoom(); 30 31 //鐒跺悗灏卞紑濮嬭窇浜嗭紝璺戠殑杩囩▼涓亣鍒颁竴鏉$嫍鎸¤矾锛屽氨鎸夊枃鍙?/span> 32 this.alarm(); 33 34 //鍒拌揪鐩殑鍦板氨鍋滆溅 35 this.stop(); 36 } 37 38 }
聽
濂戒簡锛岀▼搴忕紪鍐欏埌杩欓噷锛屽凡缁忓彂鐜伴棶棰樹簡锛屼袱涓疄鐜扮被鐨剅un()鏂规硶閮芥槸瀹屽叏鐩稿悓鐨勶紝閭h繖涓猺un()鏂规硶鐨勫疄鐜板簲璇ュ嚭鐜板湪鎶借薄绫伙紝涓嶅簲璇ュ湪瀹炵幇绫讳笂锛屾娊璞℃槸鎵€鏈夊瓙绫荤殑鍏辨€у皝瑁呫€?br>娉ㄦ剰銆€鍦ㄨ蒋浠跺紑鍙戣繃绋嬩腑锛屽鏋滅浉鍚岀殑涓€娈典唬鐮佸鍒惰繃涓ゆ锛屽氨闇€瑕佸璁捐浜х敓鎬€鐤戯紝鏋舵瀯甯堣鏄庣‘鍦拌鏄庝负浠€涔堢浉鍚岀殑閫昏緫瑕佸嚭鐜颁袱娆℃垨鏇村娆°€?br>濂斤紝闂鍙戠幇浜嗭紝鎴戜滑灏遍渶瑕侀┈涓婃洿鏀癸紝淇敼鍚庣殑绫诲浘濡傚浘濡備笅鎵€绀恒€?/p>
1 public abstract class HummerModel { 2 3 /* 4 * 棣栧厛锛岃繖涓ā鍨嬭鑳藉琚彂鍔ㄨ捣鏉ワ紝鍒鏄墜鎽囧彂鍔紝杩樻槸鐢靛姏鍙戝姩锛屽弽姝? 5 * 鏄鑳藉鍙戝姩璧锋潵锛岄偅杩欎釜瀹炵幇瑕佸湪瀹炵幇绫婚噷浜? 6 */ 7 public abstract void start(); 8 9 //鑳藉彂鍔紝閭h繕瑕佽兘鍋滀笅鏉ワ紝閭f墠鏄湡鏈簨 10 public abstract void stop(); 11 12 //鍠囧彮浼氬嚭澹伴煶锛屾槸婊存淮鍙紝杩樻槸鍝斿摂鍙?/span> 13 public abstract void alarm(); 14 15 //寮曟搸浼氳桨闅嗛殕鐨勫搷锛屼笉鍝嶉偅鏄亣鐨?/span> 16 public abstract void engineBoom(); 17 18 //閭fā鍨嬪簲璇ヤ細璺戝惂锛屽埆绠℃槸浜烘帹鐨勶紝杩樻槸鐢靛姏椹卞姩锛屾€讳箣瑕佷細璺?/span> 19 public void run(){ 20 //鍏堝彂鍔ㄦ苯杞?/span> 21 this.start(); 22 23 //寮曟搸寮€濮嬭桨楦?/span> 24 this.engineBoom(); 25 26 //鐒跺悗灏卞紑濮嬭窇浜嗭紝璺戠殑杩囩▼涓亣鍒颁竴鏉$嫍鎸¤矾锛屽氨鎸夊枃鍙?/span> 27 this.alarm(); 28 29 //鍒拌揪鐩殑鍦板氨鍋滆溅 30 this.stop(); 31 } 32 33 }
聽
鍦ㄦ娊璞$殑鎮嶉┈妯″瀷涓婂凡缁忓畾涔変簡run()鏂规硶鐨勬墽琛岃鍒欙紝鍏堝惎鍔紝鐒跺悗寮曟搸绔嬪埢杞伴福锛屼腑闂磋繕瑕佹寜涓€涓嬪枃鍙紝鍒堕€犵偣鍣0锛堣涓嶅氨涓嶆槸鍚嶈溅浜嗭級銆傜劧鍚庡仠杞︼紝瀹冪殑涓や釜鍏蜂綋瀹炵幇绫诲氨
涓嶉渶瑕佸疄鐜皉un()鏂规硶浜嗭紝鍙鎶婁唬鐮佹竻鍗?0-2銆佷唬鐮佹竻鍗?0-3涓婄殑run()鏂规硶鍒犻櫎鍗冲彲锛屼笉鍐嶈禈杩颁唬鐮併€?br>鍦烘櫙绫诲疄鐜扮殑浠诲姟灏辨槸鎶婄敓浜у嚭鐨勬ā鍨嬪睍鐜扮粰瀹㈡埛锛屽叾婧愪唬鐮佸浠g爜娓呭崟濡備笅鎵€绀恒€?/p>
public class Client { public static void main(String[] args) { //鐗涘弶鍏徃瑕丠1鍨嬪彿鐨勬倣椹?/span> HummerModel h1 = new HummerH1Model(); //H1妯″瀷婕旂ず h1.run(); } }
聽
杩愯缁撴灉濡備笅:
鎮嶉┈H1鍙戝姩...
鎮嶉┈H1寮曟搸澹伴煶鏄繖鏍风殑...
鎮嶉┈H1楦g瑳...
鎮嶉┈H1鍋滆溅...
聽
鐩墠瀹㈡埛鍙鐪婬1鍨嬪彿鐨勬倣椹溅锛屾病闂锛岀敓浜у嚭鏉ワ紝鍚屾椂鍙互杩愯璧锋潵缁欎粬鐪嬬湅銆?br>闈炲父绠€鍗曪紝閭e鏋滄垜鍛婅瘔浣犺繖灏辨槸妯℃澘鏂规硶妯″紡浣犱細涓嶄細寰堜笉灞戝憿锛熷氨杩欐ā寮忥紝澶畝鍗曚簡锛屾垜涓€鐩村湪浣跨敤鍛€锛佹槸鐨勶紝浣犵粡甯稿湪浣跨敤锛屼絾浣犱笉鐭ラ亾杩欐槸妯℃澘鏂规硶妯″紡锛岄偅浜涙墍璋撶殑楂樻墜灏?br>鍙互寰堢墰鍦拌锛氣€滅敤妯℃澘鏂规硶妯″紡灏卞彲浠ュ疄鐜扳€濓紝浣犺繕瑕佸緢宕囨嫓鍦扮湅鐫€锛屽搰锛岀墰浜猴紝妯℃澘鏂规硶妯″紡鏄粈涔堝憖锛熻繖灏辨槸妯℃澘鏂规硶妯″紡銆?/p>
2 妯℃澘鏂规硶妯″紡鐨勫畾涔?/span>
妯℃澘鏂规硶妯″紡锛圱emplate Method Pattern锛夋槸濡傛绠€鍗曪紝浠ヨ嚧璁╀綘鎰熻浣犲凡缁忚兘澶熸帉鎻″叾绮鹃珦浜嗐€傚叾瀹氫箟濡備笅锛?br>Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template
Method lets subclasses redefine certain steps of an algorithm without changing the algorithm'sstructure.
锛堝畾涔変竴涓搷浣滀腑鐨?a class="replace_word" href="http://lib.****.net/base/datastructure" title="绠楁硶涓庢暟鎹粨鏋勭煡璇嗗簱" style="color: #df3434; font-weight: bold;" target="_blank">绠楁硶鐨勬鏋讹紝鑰屽皢涓€浜涙楠ゅ欢杩熷埌瀛愮被涓€備娇寰楀瓙绫诲彲浠ヤ笉鏀瑰彉涓€涓畻娉曠殑缁撴瀯鍗冲彲閲嶅畾涔夎绠楁硶鐨勬煇浜涚壒瀹氭楠ゃ€傦級
妯℃澘鏂规硶妯″紡鐨勯€氱敤绫诲浘濡傚浘鎵€绀?
妯℃澘鏂规硶妯″紡纭疄闈炲父绠€鍗曪紝浠呬粎浣跨敤浜?a class="replace_word" href="http://lib.****.net/base/javase" title="Java SE鐭ヨ瘑搴? style="color: #df3434; font-weight: bold;" target="_blank">Java鐨勭户鎵挎満鍒讹紝浣嗗畠鏄竴涓簲鐢ㄩ潪甯稿箍娉涚殑妯″紡銆傚叾涓紝AbstractClass鍙仛鎶借薄妯℃澘锛屽畠鐨勬柟娉曞垎涓轰袱绫伙細
鈼?鍩烘湰鏂规硶
聽 鍩烘湰鏂规硶涔熷彨鍋氬熀鏈搷浣滐紝鏄敱瀛愮被瀹炵幇鐨勬柟娉曪紝骞朵笖鍦ㄦā鏉挎柟娉曡璋冪敤銆?br>鈼?妯℃澘鏂规硶
聽 聽鍙互鏈変竴涓垨鍑犱釜锛屼竴鑸槸涓€涓叿浣撴柟娉曪紝涔熷氨鏄竴涓鏋讹紝瀹炵幇瀵瑰熀鏈柟娉曠殑璋冨害锛屽畬鎴愬浐瀹氱殑閫昏緫銆?br>娉ㄦ剰銆€涓轰簡闃叉鎭舵剰鐨勬搷浣滐紝涓€鑸ā鏉挎柟娉曢兘鍔犱笂final鍏抽敭瀛楋紝涓嶅厑璁歌瑕嗗啓銆?br>鍦ㄧ被鍥句腑杩樻湁涓€涓鑹诧細鍏蜂綋妯℃澘銆侰oncreteClass1鍜孋oncreteClass2灞炰簬鍏蜂綋妯℃澘锛屽疄鐜扮埗绫绘墍瀹氫箟鐨勪竴涓垨澶氫釜鎶借薄鏂规硶锛屼篃灏辨槸鐖剁被瀹氫箟鐨勫熀鏈柟娉曞湪瀛愮被涓緱浠ュ疄鐜般€?br>鎴戜滑鏉ョ湅鍏堕€氱敤浠g爜锛孉bstractClass濡備唬鐮佹竻鍗曞涓嬫墍绀恒€?br>鎶借薄妯℃澘绫?/p>
1 public abstract class AbstractClass { 2 3 //鍩烘湰鏂规硶 4 protected abstract void doSomething(); 5 6 //鍩烘湰鏂规硶 7 protected abstract void doAnything(); 8 9 //妯$増鏂规硶 10 public void templateMethod(){ 11 /* 12 * 璋冪敤鍩烘湰鏂规硶锛屽畬鎴愮浉鍏崇殑閫昏緫 13 */ 14 this.doAnything(); 15 this.doSomething(); 16 } 17 }
聽
聽鍏蜂綋妯℃澘濡備唬鐮佹竻鍗曞涓嬫墍绀恒€?/p>
聽鍏蜂綋妯℃澘绫?/p>
public class ConcreteClass1 extends AbstractClass { //瀹炵幇鍩烘湰鏂规硶 protected void doAnything() { //涓氬姟閫昏緫澶勭悊 } protected void doSomething() { //涓氬姟閫昏緫澶勭悊 } }
聽
&
public class ConcreteClass2 extends AbstractClass { //瀹炵幇鍩烘湰鏂规硶 protected void doAnything() { //涓氬姟閫昏緫澶勭悊 } protected void doSomething() { //涓氬姟閫昏緫澶勭悊 } }
聽
聽鍦烘櫙绫?/p>
public class Client { public static void main(String[] args) { AbstractClass class1 = new ConcreteClass1(); AbstractClass class2 = new ConcreteClass2(); //璋冪敤妯$増鏂规硶 class1.templateMethod(); class2.templateMethod(); } }
聽
聽娉ㄦ剰銆€鎶借薄妯℃澘涓殑鍩烘湰鏂规硶灏介噺璁捐涓簆rotected绫诲瀷锛岀鍚堣开绫崇壒娉曞垯锛屼笉闇€瑕佹毚闇茬殑灞炴€ф垨鏂规硶灏介噺涓嶈璁剧疆涓簆rotected绫诲瀷銆傚疄鐜扮被鑻ラ潪蹇呰锛屽敖閲忎笉瑕佹墿澶х埗绫讳腑鐨勮闂?/p>
鏉冮檺銆?/p>
3 妯℃澘鏂规硶妯″紡鐨勫簲鐢?/span>
聽3.1 妯℃澘鏂规硶妯″紡鐨勪紭鐐?/span>
聽鈼?灏佽涓嶅彉閮ㄥ垎锛屾墿灞曞彲鍙橀儴鍒?/p>
鎶婅涓烘槸涓嶅彉閮ㄥ垎鐨勭畻娉曞皝瑁呭埌鐖剁被瀹炵幇锛岃€屽彲鍙橀儴鍒嗙殑鍒欏彲浠ラ€氳繃缁ф壙鏉ョ户缁墿灞曘€傚湪鎮嶉┈妯″瀷渚嬪瓙涓紝鏄笉鏄氨闈炲父瀹规槗鎵╁睍锛熶緥濡傚鍔犱竴涓狧3鍨嬪彿鐨勬倣椹ā鍨嬶紝寰堝鏄撳憖锛屽鍔犱竴涓瓙绫伙紝瀹炵幇鐖剁被鐨勫熀鏈柟娉曞氨鍙互浜嗐€?br>鈼?鎻愬彇鍏叡閮ㄥ垎浠g爜锛屼究浜庣淮鎶?br>鎴戜滑渚嬪瓙涓垰鍒氳蛋杩囩殑寮矾灏辨槸鏈€濂界殑璇佹槑锛屽鏋滄垜浠笉鎶藉彇鍒扮埗绫讳腑锛屼换鐢辫繖绉嶆暎涔辩殑浠g爜鍙戠敓锛屾兂鎯冲悗鏋滄槸浠€涔堟牱瀛愶紵缁存姢浜哄憳涓轰簡淇涓€涓己闄凤紝闇€瑕佸埌澶勬煡鎵剧被浼肩殑浠g爜锛?br>鈼?琛屼负鐢辩埗绫绘帶鍒讹紝瀛愮被瀹炵幇
鍩烘湰鏂规硶鏄敱瀛愮被瀹炵幇鐨勶紝鍥犳瀛愮被鍙互閫氳繃鎵╁睍鐨勬柟寮忓鍔犵浉搴旂殑鍔熻兘锛岀鍚堝紑闂師鍒欍€?br>3.2 妯℃澘鏂规硶妯″紡鐨勭己鐐?/span>
鎸夌収鎴戜滑鐨勮璁′範鎯紝鎶借薄绫昏礋璐e0鏄庢渶鎶借薄銆佹渶涓€鑸殑浜嬬墿灞炴€у拰鏂规硶锛屽疄鐜扮被瀹屾垚鍏蜂綋鐨勪簨鐗╁睘鎬у拰鏂规硶銆備絾鏄ā鏉挎柟娉曟ā寮忓嵈棰犲€掍簡锛屾娊璞$被瀹氫箟浜嗛儴鍒嗘娊璞℃柟娉曪紝鐢卞瓙绫?br>瀹炵幇锛屽瓙绫绘墽琛岀殑缁撴灉褰卞搷浜嗙埗绫荤殑缁撴灉锛屼篃灏辨槸瀛愮被瀵圭埗绫讳骇鐢熶簡褰卞搷锛岃繖鍦ㄥ鏉傜殑椤圭洰涓紝浼氬甫鏉ヤ唬鐮侀槄璇荤殑闅惧害锛岃€屼笖涔熶細璁╂柊鎵嬩骇鐢熶笉閫傛劅銆?br>3.3妯℃澘鏂规硶妯″紡鐨勪娇鐢ㄥ満鏅?/span>
鈼?澶氫釜瀛愮被鏈夊叕鏈夌殑鏂规硶锛屽苟涓旈€昏緫鍩烘湰鐩稿悓鏃躲€?/p>
鈼?閲嶈銆佸鏉傜殑绠楁硶锛屽彲浠ユ妸鏍稿績绠楁硶璁捐涓烘ā鏉挎柟娉曪紝鍛ㄨ竟鐨勭浉鍏崇粏鑺傚姛鑳藉垯鐢卞悇涓瓙绫诲疄鐜般€?br>鈼?閲嶆瀯鏃讹紝妯℃澘鏂规硶妯″紡鏄竴涓粡甯镐娇鐢ㄧ殑妯″紡锛屾妸鐩稿悓鐨勪唬鐮佹娊鍙栧埌鐖剁被涓紝鐒跺悗閫氳繃閽╁瓙鍑芥暟锛堣鈥滄ā鏉挎柟娉曟ā寮忕殑鎵╁睍鈥濓級绾︽潫鍏惰涓恒€?/p>
聽4 妯℃澘鏂规硶妯″紡鐨勬墿灞?/span>
鍒扮洰鍓嶄负姝紝杩欎袱涓ā鍨嬮兘绋冲畾鍦拌繍琛岋紝绐佺劧鏈変竴澶╋紝鑰佸ぇ鎬ュ寙鍖嗗湴鎵惧埌浜嗘垜锛氣€滅湅浣犳€庝箞璁捐鐨勶紝杞﹀瓙涓€鍚姩锛屽枃鍙氨鐙傚搷锛屽惖姝讳汉浜嗭紒瀹㈡埛鎻愬嚭H1鍨嬪彿鐨勬倣椹枃鍙?br>鎯宠瀹冨搷灏卞搷锛孒2鍨嬪彿鐨勫枃鍙笉瑕佹湁澹伴煶锛岃刀蹇慨鏀逛竴涓嬨€傗€濊嚜宸辨児鐨勭ジ锛屽氨瑕佹兂鍔炴硶瑙e喅瀹冿紝绋嶇◢鎬濊€冧竴涓嬶紝瑙e喅鍔炴硶鏈変簡锛屽厛鐢诲嚭绫诲浘锛屽鍥?br>聽
聽绫诲浘鏀瑰姩浼间箮寰堝皬锛屽湪鎶借薄绫籋ummerModel涓鍔犱簡涓€涓疄鐜版柟娉昳sAlarm锛岀‘瀹氬悇涓瀷鍙风殑鎮嶉┈鏄惁闇€瑕佸0闊筹紝鐢卞悇涓疄鐜扮被瑕嗗啓璇ユ柟娉曪紝鍚屾椂鍏朵粬鐨勫熀鏈柟娉曠敱浜庝笉闇€瑕佸澶栨彁
渚涜闂紝鍥犳涔熻璁′负protected绫诲瀷銆傚叾婧愪唬鐮佸浠g爜娓呭崟銆?br>鎵╁睍鍚庣殑鎶借薄妯℃澘绫?/p>
1 public abstract class HummerModel { 2 3 /* 4 * 棣栧厛锛岃繖涓ā鍨嬭鑳藉琚彂鍔ㄨ捣鏉ワ紝鍒鏄墜鎽囧彂鍔紝杩樻槸鐢靛姏鍙戝姩锛屽弽姝? 5 * 鏄鑳藉鍙戝姩璧锋潵锛岄偅杩欎釜瀹炵幇瑕佸湪瀹炵幇绫婚噷浜? 6 */ 7 protected abstract void start(); 8 9 //鑳藉彂鍔紝閭h繕瑕佽兘鍋滀笅鏉ワ紝閭f墠鏄湡鏈簨 10 protected abstract void stop(); 11 12 //鍠囧彮浼氬嚭澹伴煶锛屾槸婊存淮鍙紝杩樻槸鍝斿摂鍙?/span> 13 protected abstract void alarm(); 14 15 //寮曟搸浼氳桨闅嗛殕鐨勫搷锛屼笉鍝嶉偅鏄亣鐨?/span> 16 protected abstract void engineBoom(); 17 18 //閭fā鍨嬪簲璇ヤ細璺戝惂锛屽埆绠℃槸浜洪€€鐨勶紝杩樻槸鐢靛姏椹卞姩锛屾€讳箣瑕佷細璺?/span> 19 final public void run() { 20 21 //鍏堝彂鍔ㄦ苯杞?/span> 22 this.start(); 23 24 //寮曟搸寮€濮嬭桨楦?/span> 25 this.engineBoom(); 26 27 //瑕佽瀹冨彨鐨勫氨鏄氨鍙紝鍠囧槢涓嶆兂璁╁畠鍝嶅氨涓嶅搷 28 if(this.isAlarm()){ 29 this.alarm(); 30 } 31 32 33 //鍒拌揪鐩殑鍦板氨鍋滆溅 34 this.stop(); 35 } 36 37 //閽╁瓙鏂规硶锛岄粯璁ゅ枃鍙槸浼氬搷鐨?/span> 38 protected boolean isAlarm(){ 39 return true; 40 } 41 }
聽
聽鍦ㄦ娊璞$被涓紝isAlarm鏄竴涓疄鐜版柟娉曘€傚叾浣滅敤鏄ā鏉挎柟娉曟牴鎹叾杩斿洖鍊煎喅瀹氭槸鍚﹁鍝嶅枃鍙紝瀛愮被鍙互瑕嗗啓璇ヨ繑鍥炲€硷紝鐢变簬H1鍨嬪彿鐨勫枃鍙槸鎯宠瀹冨搷灏卞搷锛屼笉鎯宠瀹冨搷灏变笉鍝嶏紝鐢变汉鎺у埗锛屽叾婧愪唬鐮佸浠g爜娓呭崟銆?/p>
浠g爜娓呭崟10-10 鎵╁睍鍚庣殑H1鎮嶉┈
1 public class HummerH1Model extends HummerModel { 2 private boolean alarmFlag = true; //鏄惁瑕佸搷鍠囧彮 3 4 @Override 5 protected void alarm() { 6 System.out.println("鎮嶉┈H1楦g瑳..."); 7 } 8 9 @Override 10 protected void engineBoom() { 11 System.out.println("鎮嶉┈H1寮曟搸澹伴煶鏄繖鏍峰湪..."); 12 } 13 14 @Override 15 protected void start() { 16 System.out.println("鎮嶉┈H1鍙戝姩..."); 17 } 18 19 @Override 20 protected void stop() { 21 System.out.println("鎮嶉┈H1鍋滆溅..."); 22 } 23 24 protected boolean isAlarm() { 25 return this.alarmFlag; 26 } 27 28 //瑕佷笉瑕佸搷鍠囧彮锛屾槸鏈夊鎴风殑鏉ュ喅瀹氱殑 29 public void setAlarm(boolean isAlarm){ 30 this.alarmFlag = isAlarm; 31 } 32 33 }
聽
聽
鍙璋冪敤H1鍨嬪彿鐨勬倣椹紝榛樿鏄湁鍠囧彮鍝嶇殑锛屽綋鐒朵綘鍙互涓嶈鍠囧彮鍝嶏紝閫氳繃
isAlarm(false)灏卞彲浠ュ疄鐜般€侶2鍨嬪彿鐨勬倣椹槸娌℃湁鍠囧彮澹板搷鐨勶紝鍏舵簮浠g爜濡備唬鐮佹竻鍗?0-11鎵€
绀恒€?br>浠g爜娓呭崟10-11 鎵╁睍鍚庣殑H2鎮嶉┈
1 public class HummerH2Model extends HummerModel { 2 3 protected void alarm() { 4 System.out.println("鎮嶉┈H2楦g瑳..."); 5 } 6 7 protected void engineBoom() { 8 System.out.println("鎮嶉┈H2寮曟搸澹伴煶鏄繖鏍峰湪..."); 9 } 10 11 protected void start() { 12 System.out.println("鎮嶉┈H2鍙戝姩..."); 13 } 14 15 protected void stop() { 16 System.out.println("鎮嶉┈H2鍋滆溅..."); 17 } 18 19 20 //榛樿娌℃湁鍠囧彮鐨?/span> 21 protected boolean isAlarm() { 22 return false; 23 } 24 }
聽
聽
H2鍨嬪彿鐨勬倣椹缃甶sAlarm()鐨勮繑鍥炲€间负false锛屼篃灏辨槸鍏抽棴浜嗗枃鍙姛鑳姐€傚満鏅被浠g爜濡備唬鐮佹竻鍗?0-12鎵€绀?/p>
聽鎵╁睍鍚庣殑鍦烘櫙绫?/p>
1 public class Client { 2 3 public static void main(String[] args) throws IOException { 4 System.out.println("-------H1鍨嬪彿鎮嶉┈--------"); 5 System.out.println("H1鍨嬪彿鐨勬倣椹槸鍚﹂渶瑕佸枃鍙0鍝嶏紵0-涓嶉渶瑕? 1-闇€瑕?); 6 String type=(new BufferedReader(new InputStreamReader(System.in))).readLine(); 7 HummerH1Model h1 = new HummerH1Model(); 8 if(type.equals("0")){ 9 h1.setAlarm(false); 10 } 11 h1.run(); 12 13 System.out.println("\n-------H2鍨嬪彿鎮嶉┈--------"); 14 HummerH2Model h2 = new HummerH2Model(); 15 h2.run(); 16 } 17 18 }
聽
聽杩愯鏄渶瑕佷氦浜掔殑锛岄鍏堬紝瑕佹眰杈撳叆H1鍨嬪彿鐨勬倣椹槸鍚︽湁澹伴煶锛屽涓嬫墍绀?
-------H1鍨嬪彿鎮嶉┈-------- H1鍨嬪彿鐨勬倣椹槸鍚﹂渶瑕佸枃鍙0鍝嶏紵0-涓嶉渶瑕?1-闇€瑕? 杈撳叆鈥?/span>0鈥濆悗鐨勮繍琛岀粨鏋滃涓嬫墍绀猴細 -------H1鍨嬪彿鎮嶉┈-------- H1鍨嬪彿鐨勬倣椹槸鍚﹂渶瑕佸枃鍙0鍝嶏紵0-涓嶉渶瑕?1-闇€瑕? 0 鎮嶉┈H1鍙戝姩... 鎮嶉┈H1寮曟搸澹伴煶鏄繖鏍风殑... 鎮嶉┈H1鍋滆溅... -------H2鍨嬪彿鎮嶉┈-------- 鎮嶉┈H2鍙戝姩... 鎮嶉┈H2寮曟搸澹伴煶鏄繖鏍风殑... 鎮嶉┈H2鍋滆溅... 杈撳叆鈥?/span>1鈥濆悗鐨勮繍琛岀粨鏋滃涓嬫墍绀猴細 -------H1鍨嬪彿鎮嶉┈-------- H1鍨嬪彿鐨勬倣椹槸鍚﹂渶瑕佸枃鍙0鍝嶏紵0-涓嶉渶瑕?1-闇€瑕? 1 鎮嶉┈H1鍙戝姩... 鎮嶉┈H1寮曟搸澹伴煶鏄繖鏍风殑... 鎮嶉┈H1楦g瑳... 鎮嶉┈H1鍋滆溅... -------H2鍨嬪彿鎮嶉┈-------- 鎮嶉┈H2鍙戝姩... 鎮嶉┈H2寮曟搸澹伴煶鏄繖鏍风殑... 鎮嶉┈H2鍋滆溅...
聽
聽
鐪嬪埌娌★紝H1鍨嬪彿鐨勬倣椹槸鐢卞鎴疯嚜宸辨帶鍒舵槸鍚﹁鍝嶅枃鍙紝涔熷氨鏄澶栫晫鏉′欢鏀瑰彉锛屽奖鍝嶅埌妯℃澘鏂规硶鐨勬墽琛屻€傚湪鎴戜滑鐨勬娊璞$被涓璱sAlarm鐨勮繑鍥炲€煎氨鏄奖鍝嶄簡妯℃澘鏂规硶鐨勬墽琛岀粨
鏋滐紝璇ユ柟娉曞氨鍙仛閽╁瓙鏂规硶锛圚ook Method锛夈€傛湁浜嗛挬瀛愭柟娉曟ā鏉挎柟娉曟ā寮忔墠绠楀畬缇庯紝澶у鍙互鎯虫兂锛岀敱瀛愮被鐨勪竴涓柟娉曡繑鍥炲€煎喅瀹氬叕鍏遍儴鍒嗙殑鎵ц缁撴灉锛屾槸涓嶆槸寰堟湁鍚稿紩鍔涘憖锛?br>妯℃澘鏂规硶妯″紡灏辨槸鍦ㄦā鏉挎柟娉曚腑鎸夌収涓€瀹氱殑瑙勫垯鍜岄『搴忚皟鐢ㄥ熀鏈柟娉曪紝鍏蜂綋鍒板墠闈㈤偅涓緥瀛愶紝灏辨槸run()鏂规硶鎸夌収瑙勫畾鐨勯『搴忥紙鍏堣皟鐢╯tart()锛岀劧鍚庡啀璋冪敤engineBoom()锛屽啀璋冪敤
alarm()锛屾渶鍚庤皟鐢╯top()锛夎皟鐢ㄦ湰绫荤殑鍏朵粬鏂规硶锛屽苟涓旂敱isAlarm()鏂规硶鐨勮繑鍥炲€肩‘瀹歳un()涓殑鎵ц椤哄簭鍙樻洿銆?/p>
5 鏈€浣冲疄璺?/span>
聽鍒濈骇绋嬪簭鍛樺湪鍐欑▼搴忕殑鏃跺€欑粡甯镐細闂珮鎵嬧€滅埗绫绘€庝箞璋冪敤瀛愮被鐨勬柟娉曗€濄€傝繖涓棶棰樺緢鏈夋櫘閬嶆€э紝鍙嶆鎴戞槸琚棶杩囧ソ鍑犲洖锛岄偅涔堢埗绫绘槸鍚﹀彲浠ヨ皟鐢ㄥ瓙绫荤殑鏂规硶鍛紵鎴戠殑鍥炵瓟鏄兘锛屼絾寮虹儓鍦般€佹瀬搴﹀湴涓嶅缓璁繖涔堝仛锛岄偅璇ユ€庝箞鍋氬憿?
鈼?鎶婂瓙绫讳紶閫掑埌鐖剁被鐨勬湁鍙傛瀯閫犱腑锛岀劧鍚庤皟鐢ㄣ€?br>鈼?浣跨敤鍙嶅皠鐨勬柟寮忚皟鐢紝浣犱娇鐢ㄤ簡鍙嶅皠杩樻湁璋佷笉鑳借皟鐢ㄧ殑锛燂紒
鈼?鐖剁被璋冪敤瀛愮被鐨勯潤鎬佹柟娉曘€?br>杩欎笁绉嶉兘鏄埗绫荤洿鎺ヨ皟鐢ㄥ瓙绫荤殑鏂规硶锛屽ソ鐢ㄤ笉锛熷ソ鐢紒瑙e喅闂浜嗗悧锛熻В鍐充簡锛侀」鐩腑鍏佽浣跨敤涓嶏紵涓嶅厑璁革紒鎴戝氨涓€鐩存病鏈夋悶鎳備负浠€涔堣鐢ㄧ埗绫昏皟鐢ㄥ瓙绫荤殑鏂规硶銆傚鏋滀竴瀹氳璋冪敤
瀛愮被锛岄偅涓轰粈涔堣缁ф壙瀹冨憿锛熸悶涓嶆噦銆傚叾瀹炶繖涓棶棰樺彲浠ユ崲涓搴﹀幓鐞嗚В锛岀埗绫诲缓绔嬫鏋讹紝瀛愮被鍦ㄩ噸鍐欎簡鐖剁被閮ㄥ垎鐨勬柟娉曞悗锛屽啀璋冪敤浠庣埗绫荤户鎵跨殑鏂规硶锛屼骇鐢熶笉鍚岀殑缁撴灉锛堣€岃繖姝f槸妯?br>鏉挎柟娉曟ā寮忥級銆傝繖鏄笉鏄篃鍙互鐞嗚В涓虹埗绫昏皟鐢ㄤ簡瀛愮被鐨勬柟娉曞憿锛熶綘淇敼浜嗗瓙绫伙紝褰卞搷浜嗙埗绫昏涓虹殑缁撴灉锛屾洸绾挎晳鍥界殑鏂瑰紡瀹炵幇浜嗙埗绫讳緷璧栧瓙绫荤殑鍦烘櫙锛屾ā鏉挎柟娉曟ā寮忓氨鏄繖绉嶆晥鏋溿€?br>妯℃澘鏂规硶鍦ㄤ竴浜涘紑婧愭鏋朵腑搴旂敤闈炲父澶氾紝瀹冩彁渚涗簡涓€涓娊璞$被锛岀劧鍚庡紑婧愭鏋跺啓浜嗕竴鍫嗗瓙绫汇€傚湪銆娒椕椕?In Action銆嬩腑灏辫鏄庝簡锛屽鏋滀綘闇€瑕佹墿灞曞姛鑳斤紝鍙互缁ф壙杩欎釜鎶借薄绫伙紝鐒跺悗
瑕嗗啓protected鏂规硶锛屽啀鐒跺悗灏辨槸璋冪敤涓€涓被浼糴xecute鏂规硶锛屽氨瀹屾垚浣犵殑鎵╁睍寮€鍙戯紝闈炲父瀹规槗鎵╁睍鐨勪竴绉嶆ā寮忋€?/p>