設計模式學習(1)

面向對象設計原則

單一職責

每個類只有一個職責,并被完整的封裝在類中,該原則用來控制類的粒度。

例如Mapper,controller都只負責一個業務。

開閉原則

應該對擴展開放,而對修改封閉,例如定義接口或是抽象類作為抽象層,其具體層子類可以多種多樣。

里氏替換原則

子類只能擴展父類的功能,不能修改父類的功能。

依賴倒轉原則

高層不應該依賴于底層,而是應該依賴于抽象,防止代碼之間出現強關聯強耦合,因此在Spring框架中使用的是接口定義職責,這樣高層只需關注接口定義的方法,不用關心實現類,有框架自動管理。

接口隔離原則

接口的劃分應該注意粒度,不要讓一些類實現不必要的接口方法,如果出現一個實體類實現接口后,方法無意義,就應該進一步劃分接口

合成復用原則

如果需要復用某個類的功能,優先考慮將其引入本類內部作為類的內部成員或是作為參數傳入,而不是去繼承,進一步降低耦合度,也防止A的實現細節暴露導致不安全。

迪米特原則(最小知識原則)

每個類或模塊應該對其他類有著最小的知識或是最小的交互,降低耦合度。

創建型設計模式

工廠方法模式

如果直接使用new方式進行創建對象,不僅麻煩一旦出現改動,可能導致需要修改大量代碼,如果使用工廠模式,由工廠進行創建則只需要修改工程中的代碼即可,同時有些對象的創建可能需要參數,不是簡單new即可。

簡單工廠模式(不符合開閉原則),如果增加類,則需要修改工廠方法。

因此改進為工廠方法模型,將生產實體類作為一種職責,變化到抽象層,具體的實體類對應具體層實現。

抽象工廠模式

如果有多個個產品族,每個都創建一個工廠就不方便,因此直接創建一個抽象的頂層工廠,具體的產品族進行不同的實現,但是缺點在于違背了開閉原則,如果產品族中新增產品就需要修改抽象層。

建造者模式

建立一個Builder類,對需要創建的對象進行配置,最后在創建,注重的是一步一步配置的過程,且構造方法參數過多時應該使用,此時應該將類的全參構造方法設為私有,用建造者類進行配置

builder自身也應該保存參數,支持鏈式調用,build()處進行調用全參構造方法傳入設定好的所有參數。

單例模式

就是只用一個實例的情況下,無需創建太多實體對象,使用一個或者靜態方法就能滿足需求。

餓漢

懶漢式(懶加載)

線程不安全,可能導致創建多個對象。

加鎖版本,加鎖后應該還要判斷,否則可能有多個線程都已經判空并在等鎖,導致創建多次

還需要再INSTANCE上加上volatile,以保證該對象在線程中的可見性

最優解是使用另一個靜態內部類持有實例對象,既延遲加載又線程安全。

原型模式

使用原型對象進行拷貝生成新的對象(深拷貝),不能直接使用Java的拷貝方法,而是應該重寫實現深拷貝,

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

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

相關文章

在 Rocky Linux 9.2 上編譯安裝 Redis 6.2.6

文章目錄 在 Rocky Linux 9.2 上編譯安裝 Redis 6.2.6Redis 介紹官網Redis 的核心特性高性能支持多種數據結構多種持久化機制復制與高可用2.5 事務與 Lua 腳本消息隊列功能 Redis 適用場景Redis 與其他數據庫對比Redis 的優勢與劣勢Redis 優勢Redis 劣勢 部署過程系統環境信息環…

量子計算與經典計算的融合與未來

最近研學過程中發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊下方超鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。下面進入文章正…

數據結構(4)——帶哨兵位循環雙向鏈表

目錄 前言 一、帶哨兵的循環雙向鏈表是什么 二、鏈表的實現 2.1規定結構體 2.2創建節點 2.3初始化 2.4打印 2.5檢驗是否為空 2.6銷毀鏈表 2.7尾插 2.8尾刪 2.9頭插 2.10頭刪 2.11尋找特定節點 2.12任意位置插入(pos前) 2.13刪除任意節點 …

Github 2025-03-30 php開源項目日報 Top10

根據Github Trendings的統計,今日(2025-03-30統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量PHP項目10TypeScript項目1Coolify: 開源自助云平臺 創建周期:1112 天開發語言:PHP, Blade協議類型:Apache License 2.0Star數量:10527 個Fo…

3. 線程間共享數據

1. 線程共享數據會造成什么問題? 1.1 讀寫不一致 多線程讀不會造成數據變動,所以沒有問題。只要有一個線程設計修改數據,就會導致數據共享出現問題,簡單的是數據不一致,嚴重的是程序訪問已經釋放的內存,造…

JAVA垃圾回收算法和判斷垃圾的算法

一、判斷垃圾的算法 判斷對象是否為垃圾的核心是確定對象是否不再被使用。Java主要采用以下兩種算法: 1. 引用計數法(Reference Counting) 原理:每個對象維護一個引用計數器,記錄被引用的次數。當引用被添加時計數器…

界面架構 - MVVM (Qt)

MVVM MVVM 的主要特點示例示例功能示例代碼ViewModel 類(C)主函數入口(main.cpp) QML 文件(main.qml)總結 MVVM(Model-View-ViewModel)架構是一種旨在進一步分離界面和業務邏輯的設計…

第十四屆MathorCup高校數學建模挑戰賽-C題:基于 LSTM-ARIMA 和整數規劃的貨量預測與人員排班模型

目錄 摘要 一、 問題重述 1.1 背景知識 1.2 問題描述 二、 問題分析 2.1 對問題一的分析 2.2 對問題二的分析 2.3 對問題三的分析 2.4 對問題四的分析 三、 模型假設 四、 符號說明 五、 問題一模型的建立與求解 5.1 數據預處理 5.2 基于 LSTM 的日貨量預測模型 5.3 日貨量預測…

銀河麒麟V10 aarch64架構安裝mysql教程

國產操作系統 ky10.aarch64 因為是arm架構,故選擇mysql8,推薦安裝8.0.28版本 嘗試8.0.30和8.0.41版本均未成功,原因不明?? 1. 準備工作 ? 下載地址:https://downloads.mysql.com/archives/community/ 2. 清理歷史環境 不用管…

C++多繼承

可以用多個基類來派生一個類。 格式為: class 類名:類名1,…, 類名n { private: … ; //私有成員說明; public: … ; //公有成員說明; protected: … ; //保護的成員說明; }; class D: public A, protected B, private C { …//派…

某地老舊房屋自動化監測項目

1. 項目簡介 自從上個世紀90年代以來,我國經濟發展迅猛,在此期間大量建筑平地而起,并且多為磚混結構的住房,使用壽命通常約為30-50年,鋼筋混凝土結構,鋼結構等高層建筑,這些建筑在一般情況下的…

產品經理的大語言模型課 04 -模型應用的云、邊、端模式對比

目錄 算力部署方式的影響因素數據量計算難度前期投入數據隱私應用規模與泛化能力 云、邊、端部署的特點和對比典型場景舉例社區人臉門禁后廚老鼠識別 未來展望 算力部署方式的影響因素 最近和人工智能從業者進行了非常廣泛的溝通,嘗試對模型應用的云、邊、端模式進…

基于Python設計的TEQC數據質量可視化分析軟件

標題:基于Python設計的TEQC數據質量可視化分析軟件 內容:1.摘要 本文旨在設計一款基于Python的TEQC數據質量可視化分析軟件。隨著全球導航衛星系統(GNSS)的廣泛應用,數據質量的評估變得至關重要。TEQC(TransEditQualityCheck&…

Flinksql--訂單寬表

參考: https://chbxw.blog.csdn.net/article/details/115078261 (datastream 實現) 一、ODS 模擬訂單表及訂單明細表 CREATE TABLE orders (order_id STRING,user_id STRING,order_time TIMESTAMP(3),-- 定義事件時間及 Watermark(允許5秒亂序&#x…

粒子濾波介紹

目錄 粒子濾波的主要流程可以分為以下 5 個步驟: 粒子濾波(PF) vs. ESKF(誤差狀態卡爾曼濾波) 粒子濾波的主要流程可以分為以下 5 個步驟: 初始化(Initialization) 生成 N 個粒子&…

一場國際安全廠商的交流會議簡記

今天參與了一場國際安全廠商A公司組織的交流會議 與會有國際TOP企業跨境企業 還有國內一些頭部商業公司。 A公司很有意思介紹了自己是怎么做安全運營中心SOC的。 介紹了很多內容,包括他們自己的員工量/設備量/事件量/SOC中心人員量,其中人員量只有個位數…

Java面試黃金寶典30

1. 請詳細列舉 30 條常用 SQL 優化方法 定義 SQL 優化是指通過對 SQL 語句、數據庫表結構、索引等進行調整和改進,以提高 SQL 查詢的執行效率,減少系統資源消耗,提升數據庫整體性能的一系列操作。 要點 從索引運用、查詢語句結構優化、數據…

花灑洗澡完畢并關閉后過段時間會突然滴水的原因探究

洗澡完畢后的殘留水 在洗澡的過程中,我們通常會使用到大量的水。這些水會通過花灑管子到達花灑頂噴流出。由于大頂噴花灑的噴頭較大,關閉后里面的存水會更多。 氣壓失衡后的滴水 當花灑關閉后,內部的水管和花灑頭中仍存有一定量的水。由于…

QSettings用法實戰(相機配置文件的寫入和讀取)

很多情況,在做項目開發的時候,將參數獨立出來是比較好的方法 例如:相機的曝光次數、曝光時長等參數,獨立成ini文件,用戶可以在外面修改即可生效,無需在動代碼重新編譯等工作 QSettings便可以實現該功能 內…

運維培訓班之最佳選擇(The best Choice for Operation and Maintenance Training Courses)

運維培訓班之最佳選擇 從面試官的角度聊聊培訓班對運維的幫助,同時給培訓班出身的運維一些建議~ 談到運維(尤其是零基礎非科班轉行的運維)找工作,培訓班是個不可回避的討論熱點。雖然本人也做過兼職運維培訓老師,多少…