Java基礎-設計模式詳解

摘要:設計模式是軟件工程中解決常見問題的經典方案。本文結合Java語言特性,深入解析常用設計模式的核心思想、實現方式及實際應用場景,幫助開發者提升代碼質量和可維護性。


一、設計模式概述

1.1 什么是設計模式?

設計模式(Design Pattern)是經過驗證的、可重復使用的代碼設計經驗總結,分為創建型結構型行為型三大類,共23種經典模式。

1.2 學習設計模式的意義

  • 提高代碼復用性
  • 增強系統擴展性
  • 提升團隊協作效率
  • 優化代碼結構

二、創建型模式實踐

2.1 單例模式(Singleton)

場景:全局唯一對象(如配置管理器)

public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

特點:雙重檢查鎖實現線程安全


2.2 工廠模式(Factory)

場景:對象創建邏輯封裝

interface Shape {void draw();
}class Circle implements Shape {public void draw() {System.out.println("繪制圓形");}
}class ShapeFactory {public Shape getShape(String type) {if ("CIRCLE".equalsIgnoreCase(type)) {return new Circle();}return null;}
}

優勢:解耦客戶端與具體實現類


三、結構型模式解析

3.1 適配器模式(Adapter)

場景:接口兼容轉換

class LegacySystem {public void legacyRequest() {System.out.println("舊系統請求");}
}interface NewSystem {void request();
}class Adapter implements NewSystem {private LegacySystem legacy = new LegacySystem();public void request() {legacy.legacyRequest();}
}

3.2 裝飾器模式(Decorator)

場景:動態擴展功能

interface Coffee {double getCost();
}class BasicCoffee implements Coffee {public double getCost() { return 2.0; }
}abstract class CoffeeDecorator implements Coffee {protected Coffee decoratedCoffee;public CoffeeDecorator(Coffee coffee) {this.decoratedCoffee = coffee;}
}class MilkDecorator extends CoffeeDecorator {public MilkDecorator(Coffee coffee) {super(coffee);}public double getCost() {return super.decoratedCoffee.getCost() + 0.5;}
}

四、行為型模式應用

4.1 觀察者模式(Observer)

場景:事件驅動系統

interface Observer {void update(String message);
}class ConcreteObserver implements Observer {public void update(String message) {System.out.println("收到通知:" + message);}
}class Subject {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer o) {observers.add(o);}public void notifyObservers(String message) {observers.forEach(o -> o.update(message));}
}

4.2 策略模式(Strategy)

場景:算法靈活切換

interface PaymentStrategy {void pay(double amount);
}class AlipayStrategy implements PaymentStrategy {public void pay(double amount) {System.out.println("支付寶支付:" + amount);}
}class PaymentContext {private PaymentStrategy strategy;public void setStrategy(PaymentStrategy strategy) {this.strategy = strategy;}public void executePayment(double amount) {strategy.pay(amount);}
}

五、模式選擇指南

模式類型典型場景常用模式
創建型對象創建管理工廠、單例、建造者
結構型類/對象組合適配器、代理、裝飾器
行為型對象交互觀察者、策略、模板方法

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

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

相關文章

Docker 構建鏡像異常報錯解決

報錯一&#xff1a; # 啟動 SSH Agent eval $(ssh-agent -s)# 添加私鑰到 agent (替換為你的實際密鑰路徑) ssh-add ~/.ssh/id_ed25519# 驗證密鑰已加載 ssh-add -L# 查看 SSH_AUTH_SOCK 是否設置 echo $SSH_AUTH_SOCK # 應輸出類似&#xff1a;/tmp/ssh-XXXXXX/agent.XXXX# 顯…

動態規劃似包非包系列一>組合總和IIV

目錄 題目分析&#xff1a;狀態表示&#xff1a;狀態轉移方程&#xff1a;初始化填表順序返回值&#xff1a;代碼呈現&#xff1a; 題目分析&#xff1a; 狀態表示&#xff1a; 狀態轉移方程&#xff1a; 初始化填表順序返回值&#xff1a; 代碼呈現&#xff1a; class Soluti…

Linux下調試器gdb_cgdb使用

文章目錄 一、樣例代碼二、使用watchset var確定問題原因條件斷點 一、樣例代碼 #include <stdio.h>int Sum(int s, int e) {int result 0;int i;for(i s; i < e; i){result i;}return result; }int main() {int start 1;int end 100;printf("I will begin…

JSON Crack:簡化數據可視化的參數編輯器

簡介 在當今數據驅動的世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作為一種輕量級的數據交換格式&#xff0c;廣泛應用于各種開發和數據分析場景。然而&#xff0c;復雜的JSON數據往往難以閱讀和理解&#xff0c;特別是在數據量龐大時&#xf…

PostgreSQL 刪除數據庫

PostgreSQL 刪除數據庫 概述 PostgreSQL 是一款功能強大的開源關系型數據庫管理系統&#xff0c;它提供了豐富的功能和強大的性能。在數據庫管理過程中&#xff0c;有時需要刪除不再需要的數據庫&#xff0c;以釋放資源或進行數據庫維護。本文將詳細介紹如何在 PostgreSQL 中…

Linux內核物理內存組織結構

一、系統調用sys_mmap 系統調用mmap用來創建內存映射&#xff0c;把創建內存映射主要的工作委托給do_mmap函數&#xff0c;內核源碼文件處理&#xff1a;mm/mmap.c 二、系統調用sys_munmap 1、vma find_vma (mm, start); // 根據起始地址找到要刪除的第一個虛擬內存區域 vma 2…

Mac強制解鎖APP或文件夾

當Mac安裝過火絨企業版、云安全訪問服務之類的APP需要卸載的時候&#xff0c;會發現需要管理員密碼&#xff0c;正常的卸載流程走不下去&#xff0c;直接刪除APP&#xff0c;會提示“不能完成此操作&#xff0c;xxx已鎖定”的信息&#xff0c;此處就記錄一下如何關閉鎖定狀態&a…

Mixed Content: The page at https://xxx was loaded over HTTPS

一、核心原因分析 Mixed Content 警告是由于 HTTPS 頁面中引用了 HTTP 協議的資源(如腳本、圖片、iframe 等),導致瀏覽器因安全策略阻止加載這些非加密內容。HTTP 資源可能被中間人攻擊篡改,破壞 HTTPS 頁面的整體安全性。 二、推薦解決方案 1. 強制資源升級為 HTTPS ?…

ARXML文件解析-1

目錄 1 摘要2 ARXML文件2.1 作用及典型應用場景2.2 **ARXML文件的結構樹**2.3 TAG&#xff08;XML元素&#xff09;2.4 ARXML文件關鍵元素解析2.4.1 XML聲明與處理指令2.4.2 XML注釋2.4.3 ADMIN-DATA元素2.4.3 語言相關元素2.4.5 AR-PACKAGE體系結構2.4.6. 數據轉換框架2.4.7 S…

[ISP 3A ] AE的常用算法分析

&#x1f4cc; 自動曝光&#xff08;AE, Auto Exposure&#xff09;解析 自動曝光&#xff08;AE&#xff09;是相機通過調節 曝光參數&#xff08;增益、快門時間、光圈等&#xff09;來確保拍攝出的圖像亮度適宜的算法。AE 需要根據環境光線變化自動調整曝光&#xff0c;以避…

大模型學習二:DeepSeek R1+蒸餾模型組本地部署與調用

一、說明 DeepSeek R1蒸餾模型組是基于DeepSeek-R1模型體系&#xff0c;通過知識蒸餾技術優化形成的系列模型&#xff0c;旨在平衡性能與效率。 1、技術路徑與核心能力 基礎架構與訓練方法? ?DeepSeek-R1-Zero?&#xff1a;通過強化學習&#xff08;RL&#xff09;訓練&…

STM32入門學習筆記(持續更新)

b站江協科技資料 通過網盤分享的文件&#xff1a;STM32入門教程資料 鏈接: https://pan.baidu.com/s/1-rOi83sUK8CqUNsHQuvxew?pwd8krh 提取碼: 8krh LED燈閃爍0402 #include "stm32f10x.h" // Device header #include "Delay.h"int m…

企業安全——FIPs

0x00 前言 先來看一道題目。這道題目涉及到的就是道德規范和互聯網相關內容&#xff0c;本文會對相關內容進行描述和整理。 正確答案是&#xff1a;D 注意FIPs的主要目的是為了限制&#xff0c;也就是針對數據的守則。 0x01 RFC 1087 1989年1月 互聯網架構委員會 IAB 發布了…

【Linux系統編程】進程概念,進程狀態

目錄 一&#xff0c;操作系統&#xff08;Operator System&#xff09; 1-1概念 1-2設計操作系統的目的 1-3核心功能 1-4系統調用和庫函數概念 二&#xff0c;進程&#xff08;Process&#xff09; 2-1進程概念與基本操作 2-2task_struct結構體內容 2-3查看進程 2-4通…

基于TradingView和CTPBee的自動化期貨交易系統實現

引言 在量化交易領域&#xff0c;TradingView因其強大的技術分析工具和豐富的指標庫而廣受歡迎&#xff0c;但是其不支持國內期貨自動化交易&#xff0c;CTPBee則是一個優秀的國產Python期貨交易接口。本文將介紹如何將兩者結合&#xff0c;實現一個完整的自動化交易系統。 本…

初始ARM

ARM最基礎的組成單元。 最小系統&#xff1a;能系統能夠正常工作的最少器件構成的系統 。 一、CPU基礎定義 ALU&#xff08;運算單元&#xff09;&#xff1a; 負責執行算術和邏輯運算&#xff0c;是處理器的核心部分。 寄存器&#xff08;R0, R1, R12&#xff09;&#xff…

通信數據記錄儀-產品概念ID

總結: 1、支持高速CAN、支持容錯CAN、支持單線CAN(理解是支持不同的協議,CANFD、CAN2.0和LIN?) 2、 通過上位機設計時間

Qt QTableView QAbstractTableModel實現復選框+代理實現單元格編輯

話不多說&#xff0c;直接看代碼 一、Model 1、QTableModel_Test.h #pragma once#include <QAbstractTableModel> #include <QObject> #include <QModelIndex>class QTableModel_Test : public QAbstractTableModel {Q_OBJECT public:QTableModel_Test(Q…

JavaWeb學習--MyBatis-Plus整合SpringBoot的ServiceImpl方法(增加,修改與刪除部分)

接下來是常用的增加&#xff0c;修改以及刪除部分 首先是增加部分&#xff0c;增加一個新的數據 Testpublic void testInsert() {// 添加一個新用戶記錄Student s new Student();s.setName("NewStudent");s.setAge(25);boolean saved studentService.save(s);//可以…

明清兩朝全方位對比

目錄 一、政治制度二、民族與社會三、經濟與對外四、文化與思想五、軍事與邊疆六、滅亡原因總結 明清兩朝是中國歷史上最后兩個封建王朝&#xff0c;在政治、經濟、文化等方面存在顯著差異&#xff0c;以下為主要區別&#xff1a; 一、政治制度 皇權集中程度 明朝&#xff1a;…