java進階(一)+學習筆記

1.JAVA設計模式

1.1 什么是設計模式

設計模式是軟件開發過程中前輩們在長期實踐中針對重復出現的問題總結出來的最佳解決方案。這些模式不是具體的代碼實現,而是經過驗證的、可重用的設計思想,能夠幫助開發者更高效地解決特定類型的問題。

設計模式的重要性體現在:

  • 提供了標準化的解決方案模板

  • 促進了代碼重用和設計一致性

  • 提高了系統的可維護性和擴展性

  • 便于開發者之間的溝通和理解

1.2 為什么要學習設計模式

學習設計模式對開發者有多方面的好處:

  1. 提高編程思維能力:培養面向對象的設計思維,學會從更高層次思考問題

  2. 標準化設計:遵循業界認可的最佳實踐,使設計更加規范化

  3. 增強代碼質量

    • 提高代碼復用性,減少重復代碼

    • 增強系統可擴展性,便于未來功能添加

    • 提高靈活性,使系統更容易適應變化

  4. 提升源碼閱讀能力:許多優秀框架和庫都使用了設計模式,理解模式有助于快速掌握其設計思想

  5. 開閉原則支持:在大型項目中添加新功能時,可以最小化對現有代碼的影響

2.UML建模語言基礎

統一建模語言(UML)是軟件設計中用于分析和設計類與類(接口)之間關系的標準化建模語言。它通過靜態圖形(類圖)來表達系統結構。

2.1 UML類圖基本要素

  1. 類(Class)表示:

  2. 接口(Interface)表示:

  3. 完整類圖示例

2.2 類之間的關系詳解

1. 繼承關系(Inheritance)

表示"is-a"關系,即子類是父類的一種特殊化:

  • 類繼承類

  • 接口繼承接口

示例:

這里Student和Teacher可能繼承自一個共同的Person類,共享name等屬性

2. 實現關系(Realization)

表示類實現接口的功能:

Car和Ship類都實現了Vehicle接口的move()方法,但各自實現方式不同

3. 依賴關系(Dependency)

"use-a"關系,在一個類的方法中使用另一個類,具有臨時性:

Person類在call方法中臨時使用了MobilePhone對象,方法結束后關系解除

4. 關聯關系(Association)

"has-a"關系,一個類作為另一個類的成員變量。根據強弱可分為:

聚合關系(Aggregation)

弱關聯,整體和部分可以獨立存在:

即使University不存在了,Teacher仍然可以存在

組合關系(Composition)

強關聯,生命周期一致,整體控制部分的生命周期:

Head和Mouth是強關聯,Head不存在時Mouth也不存在

3.學習筆記?

4.拓展?

4.1 設計模式分類

設計模式通常分為三大類:

創建型模式

  • 單例模式(Singleton)

  • 工廠方法模式(Factory Method)

  • 抽象工廠模式(Abstract Factory)

  • 建造者模式(Builder)

  • 原型模式(Prototype)

結構型模式

  • 適配器模式(Adapter)

  • 裝飾器模式(Decorator)

  • 代理模式(Proxy)

  • 外觀模式(Facade)

  • 橋接模式(Bridge)

  • 組合模式(Composite)

  • 享元模式(Flyweight)

行為型模式

  • 策略模式(Strategy)

  • 模板方法模式(Template Method)

  • 觀察者模式(Observer)

  • 迭代器模式(Iterator)

  • 責任鏈模式(Chain of Responsibility)

  • 命令模式(Command)

  • 備忘錄模式(Memento)

  • 狀態模式(State)

  • 訪問者模式(Visitor)

  • 中介者模式(Mediator)

  • 解釋器模式(Interpreter)

4.2 設計模式應用原則

  1. 開閉原則(OCP):對擴展開放,對修改關閉

  2. 單一職責原則(SRP):一個類只負責一個功能領域

  3. 里氏替換原則(LSP):子類必須能夠替換父類

  4. 依賴倒置原則(DIP):依賴抽象而非具體實現

  5. 接口隔離原則(ISP):使用多個專用接口而非單一總接口

  6. 迪米特法則(LoD):最少知識原則,減少類間耦合

  7. 組合/聚合復用原則(CARP):優先使用組合而非繼承

4.3 實際應用建議

  1. 不要過度設計:只在必要時應用設計模式

  2. 理解優于記憶:掌握模式背后的思想比記住結構更重要

  3. 靈活應用:根據實際情況調整模式實現

  4. 重構到模式:可以先實現功能,再通過重構引入模式

  5. 模式組合:復雜問題可能需要多個模式組合解決

設計模式是優秀開發者的重要工具,但并非銀彈。合理運用可以顯著提高代碼質量,而濫用則可能導致過度設計。理解每種模式的適用場景和優缺點,才能在適當的時候做出最佳選擇。

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

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

相關文章

Pandas-數據清洗與處理

Pandas-數據清洗與處理一、數據清洗的核心目標二、缺失值處理1. 缺失值檢測2. 缺失值處理策略(1)刪除法(2)填充法三、異常值識別與處理1. 異常值檢測方法(1)統計法(2)業務規則法2. 異…

在 MacOS 上安裝和配置 Kafka

消息代理是一種軟件,充當在不同應用程序之間發送消息的中介。它的功能類似于服務器,從一個應用程序(稱為生產者)接收消息,并將其路由到一個或多個其他應用程序(稱為消費者)。消息代理的主要目的…

基于Leaflet調用天地圖在線API的多層級地名檢索實戰

目錄 前言 一、天地圖在線檢索 1、在線檢索功能 2、再談后后接口 二、Leaflet多層級實現實例 1、層級調用實現原理 2、Leaflet中多層級調用 3、成果展示 三、總結 前言 “地圖是世界的索引,而地名則是索引中的索引。”當互聯網地圖進入 Web 2.0 時代&#x…

基于Prompt結構的語校解析:3H日本語學校信息建模實錄(4/500)

基于Prompt結構的語校解析:3H日本語學校信息建模實錄(4/500) 系列延續:500所日本語言學校結構數據工程 關鍵詞:招生結構、JLPTEJU、國籍比例、認定校、Prompt訓練集 一、我們在構建什么樣的語言學校語料? …

Leaflet面試題及答案(61-80)

查看本專欄目錄 文章目錄 ?? 面試問題及答案(61-80)61. 如何在地圖上顯示一個動態更新的圖層?62. 如何實現地圖上的熱力圖(Heatmap)?63. 如何自定義地圖控件的位置?64. 如何處理地圖加載失敗的情況?65. 如何實現地圖的離線功能?66. 如何將地圖導出為圖片?67. 如何實…

MIG_IP核的時鐘系統

MIG_IP核的時鐘系統時鐘的種類和配置時鐘的種類和配置 整體框圖 DDR_PHY_CLK:DDR3的工作頻率,用來得到想要的線速率。假設此時鐘為800M,那么DDR雙沿采樣,線速率為1600Mbit; UI_CLK:DDR_PHY_CLK的四分之一…

若依框架集成阿里云OSS實現文件上傳優化

背景介紹 在若依框架目前的實現中,是把圖片存儲到了服務器本地的目錄,通過服務進行訪問,這樣做存儲的是比較省事,但是缺點也有很多: 硬件與網絡要求:服務器通常需要高性能的硬件和穩定的網絡環境&#xff0…

Mac如何連接惠普M126a打印機(教程篇)

這里寫自定義目錄標題Mac如何連接惠普M126a打印機(教程篇)教程配置如下:Mac如何連接惠普M126a打印機(教程篇) 惠普M126a連接Mac(教程篇) 教程配置如下: 首先,先獲取與HP打…

感恩日記:記錄生活中的美好時刻

感恩日記的landing page登錄注冊填寫感恩事項私信可以體驗一下

一扇門鈴,萬向感應——用 eventfd 實現零延遲通信

🔍 本篇概要 eventfd 是 Linux 提供的一種輕量級事件通知機制。你可以把它想象成一個“計數器盒子”。它里面維護的是一個64位的計數器。寫入:往盒子里放一些數字(比如 1、5、10),表示有幾件事發生了。讀取&#xff1a…

基于Node.js的線上教學系統的設計與實現(源碼+論文+調試+安裝+售后)

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。系統背景近年來,全球數字化浪潮的推進與教育公平化需求的增長,促使線上教學迎…

互斥鎖詳解(操作系統os)

1. 互斥鎖 (Mutex) - 檔案室的“智能鎖”首先,我們給之前討論的那些“鎖”一個正式的名字:互斥鎖 (Mutex)。概念:你可以把它簡單理解成檔案室門上的一把“智能鎖”。它只有兩種狀態:locked (已上鎖) 或 unlocked (未上鎖)。操作&a…

自動潤滑系統:從 “盲目養護“ 到智能精注的工業運維革命

?在工業運維的漫長歷史中,傳統潤滑模式如同"定時喂飯"——無論設備實際需求,僅憑經驗或固定周期執行潤滑作業。這種模式埋下兩大隱患:過度潤滑:某汽車生產線曾因季度性強制潤滑,每年浪費1.2噸潤滑脂&#x…

【Java八股文總結 — 包學會】(二)計算機網絡

1.一條url輸入到瀏覽器最后顯示頁面的過程 URL解析與處理 瀏覽器解析URL(如https://www.example.com/page) 分離協議(https)、域名(www.example.com)和資源路徑(/page) 檢查HSTS預加…

力扣61.旋轉鏈表

給你一個鏈表的頭節點 head ,旋轉鏈表,將鏈表每個節點向右移動 k 個位置。示例 1:輸入:head [1,2,3,4,5], k 2 輸出:[4,5,1,2,3]示例 2:輸入:head [0,1,2], k 4 輸出:[2,0,1]提示…

深度剖析:std::vector 內存機制與 push_back 擴容策略

深度剖析:std::vector 內存機制與 push_back 擴容策略 1. std::vector 核心內部結構 #mermaid-svg-8HOj3MqsD6UVgEeA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8HOj3MqsD6UVgEeA .error-icon{fill:…

GROW領導力模型

GROW領導力模型是由英國教練格雷厄姆亞歷山大(Graham Alexander)、艾倫Fine和約翰惠特默(John Whitmore)在20世紀80年代提出的,最初用于體育教練領域,后來被廣泛應用于企業管理、領導力發展和個人成長中。它…

打破并發瓶頸:虛擬線程實現詳解與傳統線程模型的性能對比

目錄 一、定義與特性 二、虛擬線程實現 2.1 使用 Thread.startVirtualThread() 創建 2.2 使用 Thread.ofVirtual() 創建 2.3 使用 ThreadFactory 創建 2.4 使用 Executors.newVirtualThreadPerTaskExecutor()創建 三、虛擬線程和普通線程的區別 3.1 線程管理方式不同 3…

“28項評測23項SOTA——GLM-4.1V-9B-Thinking本地部署教程:10B級視覺語言模型的性能天花板!

一、模型介紹 GLM-4.1V-9B-Thinking是由智譜AI聯合清華大學團隊推出的多模態大模型,以GLM-4-9B-0414基座模型為底,通過引入“思維鏈推理機制”和“課程采樣強化學習策略”(Reinforcement Learning with Curriculum Sampling)&…

推薦系統-Random算法

Random算法總結引言 在推薦系統研究與應用中,我們常常需要一些簡單的基線算法來衡量更復雜算法的性能提升。Random(隨機推薦)算法是最基礎的基線方法之一,它通過隨機生成評分來模擬用戶對物品的偏好。雖然這種方法看似簡單&#x…