首页 > 社会 > 正文内容

Java父类调用子类方法实战:模板方法模式应用场景

社会2025-05-19 14:07:51

馃殌 浣犳槸涓嶆槸缁忓父鐤戞儜锛氱埗绫诲嚟浠€涔堣兘璋冪敤瀛愮被鏂规硶锛熻繖涓嶇瀛﹀晩锛佸氨鍍忚€佺埜瑕佸€熺敤鍎垮瓙鐨勬父鎴忚处鍙锋墦鎺掍綅锛屽惉鐫€灏辩璋卞鍚э紵浠婂ぉ鍜变滑灏辨幇寮€杩欎釜"鍙嶅父璇?鐨凧ava鐗规€э紝鐢ㄦ渶鎺ュ湴姘旂殑鏂瑰紡鎼炴噦妯℃澘鏂规硶妯″紡锛?/p>


馃攳 鐏甸瓊鎷烽棶锛氱埗绫昏皟鐢ㄥ瓙绫讳笉鏄繚鑳岀户鎵垮師鍒欏悧锛?/h3>

鍏堝埆鎬ョ潃鎽旈敭鐩橈紒鍜变滑涓句釜鏍楀瓙馃尠锛氬亣璁句綘鍦ㄥ紑鍙戝鍗栫郴缁燂紝鎵€鏈夎鍗曞鐞嗛兘鏈夌浉鍚岀殑姝ラ锛堜笅鍗曗啋鏀粯鈫掗厤閫侊級锛屼絾涓嶅悓鍟嗗澶勭悊閰嶉€佺殑鏂瑰紡涓嶅悓銆傝繖鏃跺€欐ā鏉挎柟娉曟ā寮忓氨娲句笂鐢ㄥ満浜嗭紒

鈥?strong>鈥嬫牳蹇冨璺€?/strong>鈥嬶細鐖剁被瀹氫箟绠楁硶妗嗘灦锛屾妸鍙彉姝ラ鐣欑粰瀛愮被瀹炵幇銆傚氨鍍忎綘濡堝仛鑿滄€昏锛?鐏€欐垜鏉ユ妸鎻★紝鏀惧灏戣荆妞掍綘鑷繁鐪嬬潃鍔烇紒"


馃洜锔?鎵嬫妸鎵嬩唬鐮佸疄鎴橈細涓夋槑娌诲埗浣滄ā鏉?/h3>

鍜变滑鐢ㄥ仛涓夋槑娌荤殑鍦烘櫙鐞嗚В杩欎釜妯″紡锛?/p>

java澶嶅埗
abstract class SandwichMaker {
    // 妯℃澘鏂规硶锛坒inal闃叉绡℃敼绁栦紶绉樻柟锛?/span>
    final void makeSandwich() {
        cutBread();  // 鍥哄畾姝ラ
        addMeat();   // 鎶借薄鏂规硶鈫掍氦缁欏瓙绫?/span>
        addSauce();  // 閽╁瓙鏂规硶鈫掑彲閫夋楠?/span>
        wrap();      // 鍥哄畾鏀跺熬
    }

    void cutBread() { System.out.println("鍒囬潰鍖呯墖"); }
    abstract void addMeat();
    void addSauce() {} // 榛樿涓嶆祰閰?/span>
    void wrap() { System.out.println("鍖呰鎴愬搧"); }
}

class TurkeySandwich extends SandwichMaker {
    void addMeat() { System.out.println("鏀剧伀楦¤倝"); }
    void addSauce() { System.out.println("娴囪渹铚滆姤鏈叡"); }
}

馃挕 鈥?strong>鈥嬮噸鐐硅В璇烩€?/strong>鈥嬶細

  • 妯℃澘鏂规硶灏卞儚鐢熶骇绾挎祦姘存Ы
  • 鎶借薄鏂规硶鏄繀椤诲~鐨勫潙锛堟瘮濡傝倝绫婚€夋嫨锛?/li>
  • 閽╁瓙鏂规硶鍍忚嚜閫夐厤浠讹紙鍔犱笉鍔犻叡闅忔剰锛?/li>

馃専 妯″紡瀵规瘮锛氫竴鎷涚湅娓呴€傜敤鍦烘櫙

鈥?strong>鈥嬪満鏅€?/strong>鈥?/th>鐢ㄦā鏉挎柟娉?/th>涓嶇敤妯℃澘鏂规硶
澶栧崠绯荤粺璁㈠崟澶勭悊鉁?缁熶竴娴佺▼鎺у埗鉂?瀹规槗婕忔楠ゆ垨椤哄簭閿欎贡
娓告垙鎶€鑳介噴鏀鹃€昏緫鉁?淇濊瘉鎶€鑳藉墠鎽?鍚庢憞鍥哄畾鉂?姣忎釜鎶€鑳介兘瑕侀噸澶嶅啓閫氱敤閫昏緫
鐢靛晢淇冮攢娲诲姩閰嶇疆鉁?寮哄埗鏍¢獙娲诲姩鏃堕棿绛夊浐瀹氳鍒?/td>鉂?鍙兘缁曡繃椋庢帶鏍¢獙

馃 楂橀璇尯锛氭柊鎵嬪鏄撹俯鐨?涓潙

  1. 鈥?strong>鈥嬭繃搴﹁璁¤鍛娾€?/strong>鈥嬶細
    褰撳彧鏈?-2涓瓙绫绘椂锛屽埆鎬ョ潃鐢ㄦā鏉挎ā寮忥紒锛堝氨鍍忎负浜嗗悆纰楁场闈拱鏁村鍘ㄥ叿锛?/p>

  2. 鈥?strong>鈥嬫潈闄愬け鎺х幇鍦衡€?/strong>鈥嬶細
    鎶婃ā鏉挎柟娉曡鎴恜rivate鈫掔洿鎺G锛佽浣忚鐢ㄢ€?strong>鈥媝rotected鈥?/strong>鈥嬩慨楗扮暀缁欏瓙绫荤殑鏂规硶

  3. 鈥?strong>鈥嬫寰幆闄烽槺鈥?/strong>鈥嬶細
    鍗冧竾鍒湪鐖剁被鏂规硶閲岃皟鍏朵粬鏈疄鐜扮殑鎶借薄鏂规硶锛佸氨鍍忎笉鑳借鑰佸鍦ㄦ斁杈f鍓嶅厛闂綘瑕佷笉瑕佽荆妞?/p>


馃毃 鐪熷疄妗堜緥锛氭煇鐢靛晢鐨勮娉暀璁?/h3>

鍘诲勾鎴戝洟闃熺敤妯℃澘鏂规硶閲嶆瀯淇冮攢绯荤粺锛岀粨鏋滃洜涓衡€?strong>鈥嬫病澶勭悊濂藉紓甯告祦绋嬧€?/strong>鈥嬬炕杞︿簡銆傚弻鍗佷竴褰撳ぉ锛屾湁涓瓙绫诲湪璁$畻婊″噺鏃舵姏寮傚父锛屽鑷存暣涓埗绫绘祦绋嬩腑鏂紝鎹熷け鎯ㄩ噸...锛堝叿浣撴暟鎹笉鏂逛究閫忛湶锛屼絾璧斿伩閲戦澶熶拱杈哅odel 3锛?/p>

鈥?strong>鈥嬫暀璁€荤粨鈥?/strong>鈥嬶細

  1. 鍦ㄦā鏉挎柟娉曢噷蹇呴』鍔爐ry-catch鍧?/li>
  2. 鍏抽敭姝ラ瑕佹湁fallback鏂规
  3. 鐢ㄥ崟鍏冩祴璇曡鐩栨墍鏈夊瓙绫诲疄鐜?/li>

馃挕 鐙绉樼瑘锛氭ā鏉挎ā寮忕殑闅愯棌鐜╂硶

鏈€杩戝彂鐜颁釜楠氭搷浣滐細鈥?strong>鈥嬫ā鏉挎柟娉?宸ュ巶妯″紡鈥?/strong>鈥嬬粍鍚堟妧銆傛瘮濡傚湪娓告垙寮€鍙戜腑锛?/p>

  1. 鐢ㄥ伐鍘傜敓鎴愪笉鍚屾妧鑳藉璞?/li>
  2. 妯℃澘鏂规硶鎺у埗鎶€鑳介噴鏀惧姩鐢?/li>
  3. 瀛愮被瀹炵幇鍏蜂綋浼ゅ璁$畻
    瀹炴祴鑳借浠g爜閲忓噺灏?0%锛侊紙鎴戜滑椤圭洰缁勭湡瀹炴暟鎹級

馃寛 缁堟瀬鎬濊€冿細浠€涔堟椂鍊欒鎵撶牬妯℃澘锛?/h3>

鍘诲勾閲嶆瀯鑰侀」鐩椂锛岄亣鍒颁釜绁栦紶妯℃澘绫绘湁15灞傜户鎵匡紒杩欑"濂楀▋寮忕户鎵?浼氬鑷达細

  • 璋冭瘯鏃跺儚璧拌糠瀹紙寰楃湅鍗佸嚑灞傜埗绫伙級
  • 鏂颁汉涓婃墜鐩存帴鎳甸€硷紙鍏ヨ亴鍩硅瑕?澶╋級
  • 鏀逛釜鍩虹鏂规硶瑕佸叏缁勮瘎瀹★紙鐗典竴鍙戝姩鍏ㄨ韩锛?/li>

杩欐椂鍊欏氨璇ョ敤鈥?strong>鈥嬬粍鍚堜唬鏇跨户鎵库€?/strong>鈥嬶紝鎶婃ā鏉挎媶鎴愬涓瓥鐣ョ粍浠躲€傚氨鍍忔妸鐟炲+鍐涘垁鎷嗘垚鍗曠嫭宸ュ叿锛岀敤鍝釜鎷垮摢涓紝涓嶉鍚楋紵


涓嬫鐪嬪埌JdbcTemplate.execute()杩欑被婧愮爜鏃讹紝浣犲搧锛屼綘缁嗗搧鈥斺€旇繖涓嶅氨鏄ā鏉挎柟娉曞湪Spring涓殑缁忓吀搴旂敤鍚楋紵鎼炴噦杩欎釜妯″紡锛岀湅婧愮爜閮戒細杞绘澗寰堝锛侊紙绐佺劧鍙戠幇宸茬粡鍑屾櫒2鐐逛簡锛岃繖鐭ヨ瘑鐐瑰悗鍔茬湡澶?..锛?/p>

搜索