23種設計模式-行為型模式之模版方法模式(Java版本)

Java 模板方法模式(Template Method Pattern)詳解

🧠 什么是模板方法模式?

模板方法模式是一種行為型設計模式,在一個方法中定義一個操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下重新定義該算法的某些特定步驟。


🎯 使用場景

  • 多個子類有相同的方法結構,但部分實現不同時
  • 代碼中包含重復邏輯,想通過抽象類來提取通用部分
  • 希望控制子類擴展的步驟和順序

🏗? 模式結構

  • AbstractClass(抽象類):定義模板方法,聲明抽象的基本操作
  • ConcreteClass(具體子類):實現基本操作,繼承模板方法的算法骨架

? 示例:制作飲品

抽象類(模板)

public abstract class Beverage {// 模板方法public final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}void boilWater() {System.out.println("燒開水");}abstract void brew();void pourInCup() {System.out.println("倒入杯中");}abstract void addCondiments();
}

子類:制作茶

public class Tea extends Beverage {@Overridevoid brew() {System.out.println("用茶葉泡水");}@Overridevoid addCondiments() {System.out.println("加檸檬");}
}

子類:制作咖啡

public class Coffee extends Beverage {@Overridevoid brew() {System.out.println("用咖啡粉沖泡");}@Overridevoid addCondiments() {System.out.println("加糖和牛奶");}
}

客戶端調用

public class Client {public static void main(String[] args) {Beverage tea = new Tea();tea.prepareRecipe();System.out.println("——————");Beverage coffee = new Coffee();coffee.prepareRecipe();}
}

? 優點

  • 封裝不變部分,提取公共代碼
  • 行為由子類決定,符合開閉原則
  • 提高代碼復用性

?? 缺點

  • 每個不同實現都需要一個子類,類數目可能增多
  • 子類可能因為重寫方法影響整體結構穩定性

🧩 使用建議

當多個子類有類似的邏輯結構時,可用模板方法模式提取共同結構,提升代碼的復用性和可維護性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78225.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

長城杯鐵人三項初賽-REVERSE復現

前言 記錄記錄 1.LoginToMe int __fastcall main(int argc, const char **argv, const char **envp) {unsigned int v3; // eaxchar s[96]; // [rsp10h] [rbp-70h] BYREFint v6; // [rsp70h] [rbp-10h]int v7; // [rsp78h] [rbp-8h]int i; // [rsp7Ch] [rbp-4h]memset(s, 0, s…

DNS實驗

DNS原理 客戶端發起請求:客戶端向本地 DNS 服務器發送域名解析請求,這是流程的起始點。本地 DNS 服務器查詢根域名服務器:若本地 DNS 服務器緩存中無對應記錄,它向根域名服務器發起查詢,根域名服務器是 DNS 系統頂層&a…

SQLMesh 通知系統深度解析:構建自動化監控體系

SQLMesh 是一款強大的數據編排工具,其內置的靈活通知系統可顯著提升團隊協作效率。本文將系統解讀 SQLMesh 的通知機制,涵蓋配置方法、事件觸發邏輯及高級定制技巧。 一、通知系統的核心架構 1. 通知目標(Notification Targets) …

精益數據分析(20/126):解析經典數據分析框架,助力創業增長

精益數據分析(20/126):解析經典數據分析框架,助力創業增長 在創業和數據分析的學習道路上,每一次深入探索都可能為我們帶來新的啟發。今天,依舊帶著和大家共同進步的想法,我們一起深入研讀《精…

【OSG學習筆記】Day 8: 紋理貼圖——賦予模型細節

在 OSG(Open Scene Graph)中,紋理貼圖是為模型添加細節的關鍵技術,主要涉及紋理加載、UV 映射和多重紋理疊加三部分。 基礎理論 紋理加載 紋理的作用,就是將2D圖像映射到3D模型表面,增強視覺細節。 紋理類型與格式支持: OSG 支持多種圖像格式,包括常見的 .jpg/.jpe…

基于事件驅動的云原生后端架構設計:從理念到落地

??個人主頁??:慌ZHANG-CSDN博客 ????期待您的關注 ???? 一、引言:微服務之后,事件驅動正在成為新范式 隨著業務復雜度的提升,傳統同步式微服務調用模式逐漸暴露出瓶頸:服務間耦合度高、并發能力有限、出錯鏈路復雜。而在互聯網業務、金融交易、物聯網等場景中…

vue3:十一、主頁面布局(修改頂部導航欄樣式-右側:用戶信息+退出登錄+全屏顯示)

一、效果 完成效果,增加頂部導航欄,右側用戶信息(其中個人中心需要后續進行頁面開發,這里只寫了退出登錄功能),以及全屏功能 二、搭建并引入右側組件 將右側內容封裝到單獨的組件,直接引入(像左側導航條等內容也是可以做成這種形式) 1、新建右側組件的頁面 在layout中…

沁恒CHV203中斷嵌套導致修改線程棧-韋東山

調試專題bug實例 2025年01月09日20點場 處理辦法1:就是關閉中斷嵌套 處理辦法2: 使用原來的棧

Qt本地化 - installTranslator不生效

bool QCoreApplication::installTranslator(QTranslator *translationFile)注意這里輸入的是QTranslator對象指針,如果QTranslator是局部變量,一旦離開其作用域就會導致翻譯失效 錯誤代碼示范: void ApplyTranslator(const QString& qmf…

Qt UDP組播實現與調試指南

在Qt中使用UDP組播(Multicast)可以實現高效的一對多網絡通信。以下是關鍵步驟和示例代碼: 一、UDP組播核心機制 組播地址:使用D類地址(224.0.0.0 - 239.255.255.255)TTL設置:控制數據包傳播范圍(默認1,同一網段)網絡接口:指定發送/接收的物理接口二、發送端實現 /…

PCB封裝主要組成元素

PCB(Printed Circuit Board,印刷電路板)封裝是指將電子元件固定在 PCB 上,并實現電氣連接的方式。主要包括以下幾類。 1. 焊盤(Pad) 作用:焊盤是 PCB 封裝中最重要的元素之一,它是…

前端基礎之《Vue(8)—內置組件》

一、Vue2.0中的內置組件 1、<slot> 插槽 2、<keep-alive> 動態組件 被keep-alive所包裹的組件&#xff1a; &#xff08;1&#xff09;不會被銷毀。 &#xff08;2&#xff09;還會多兩個生命周期鉤子&#xff1a;activated()、deactivated()。 &#xff08;3&a…

某大型電解鋁廠電解系統諧波治理裝置改造沃倫森電氣

電解鋁行業諧波治理解決方案——無源濾波裝置優化升級&#xff0c;保障穩定運行 在電解鋁生產過程中&#xff0c;諧波污染問題嚴重影響電網電能質量&#xff0c;甚至可能導致濾波裝置損壞&#xff0c;引發群爆事故。河南登封某大型電解鋁廠通過無源濾波裝置智能化改造&#xff…

在 Ubuntu 環境為 Elasticsearch 引入 `icu_tokenizer

1. 為什么需要 ICU 分析插件 Elasticsearch 默認的 standard tokenizer 遵循 UAX #29 規則&#xff0c;但在 CJK&#xff08;中、日、韓&#xff09;等亞洲語言上僅能按字符切分&#xff0c;無法識別詞邊界&#xff1b;對包含重音符號、大小寫或多腳本混排的文本也缺乏統一歸一…

避免事件“穿透”——Vue 中事件冒泡的理解與解決方案

一、事件冒泡是什么&#xff1f; 事件冒泡指的是&#xff1a;當某個元素上的事件被觸發后&#xff0c;事件會從該元素向其父級、祖先元素一直“冒泡”傳遞&#xff0c;直到 document。這意味著&#xff0c;如果父元素綁定了點擊事件&#xff0c;子元素觸發點擊時也可能順帶觸發…

【Java面試筆記:進階】17.一個線程兩次調用start()方法會出現什么情況?

1. 線程啟動與異常 線程啟動:Java 線程只能啟動一次,通過調用 Thread 對象的 start() 方法。多次啟動的后果:如果嘗試第二次調用 start() 方法,會拋出 IllegalThreadStateException 運行時異常。(1) 代碼示例 public class ThreadStartDemo {public static void main(Stri…

Flask + ajax上傳文件(一)

一、概述 本教程將教你如何使用Flask后端和AJAX前端實現文件上傳功能,包含完整的代碼實現和詳細解釋。 二、環境準備 1. 所需工具和庫 Python 3.xFlask框架jQuery庫Bootstrap(可選,用于美化界面)2. 安裝Flask pip install flask三、項目結構 upload_project/ ├── a…

NHANES指標推薦:TyG-WHtR

文章題目&#xff1a;Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI&#xff1a;10.1186/s12933-025-02674-z 中文標題&#xff1a;心血管健康…

OpenHarmony 開源鴻蒙北向開發——hdc工具使用及常用命令(持續更新)

hdc&#xff08;OpenHarmony Device Connector&#xff09;是為開發人員提供的用于設備連接調試的命令行工具&#xff0c;該工具需支持部署在 Windows/Linux/Mac 等系統上與 OpenHarmony 設備&#xff08;或模擬器&#xff09;進行連接調試通信。簡單來講&#xff0c;hdc 是 Op…

MCP servers源碼詳細解析

MCP servers詳細解析 Model Context Protocol (MCP) 是一個標準化協議&#xff0c;用于讓大型語言模型&#xff08;LLMs&#xff09;通過結構化服務器安全地與工具和數據源交互。項目提供了 參考實現、官方集成和社區貢獻的服務器&#xff0c;支持數據庫、API、文件系統等場景…