最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java常用設(shè)計(jì)模式及應(yīng)用場景示例詳解

 更新時(shí)間:2026年03月21日 09:38:32   作者:廋到被風(fēng)吹走  
設(shè)計(jì)模式是軟件開發(fā)的經(jīng)驗(yàn)總結(jié),掌握常見模式可以提高代碼質(zhì)量和開發(fā)效率,這篇文章主要介紹了Java常用設(shè)計(jì)模式及應(yīng)用場景的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

設(shè)計(jì)模式分為三大類:創(chuàng)建型(5種)、結(jié)構(gòu)型(7種)、行為型(11種),以下是 Java 開發(fā)中最核心、高頻使用的模式及真實(shí)場景

一、創(chuàng)建型模式(Creational Patterns)

模式核心目的Java/框架中的應(yīng)用場景
單例模式確保類僅有一個(gè)實(shí)例,全局訪問1. Spring Bean 默認(rèn)作用域(singleton)
2. Runtime.getRuntime() 獲取 JVM 運(yùn)行時(shí)
3. 數(shù)據(jù)庫連接池(如 HikariCP 的池管理器)
工廠模式
(簡單工廠/工廠方法/抽象工廠)
封裝對象創(chuàng)建邏輯,解耦調(diào)用者與實(shí)現(xiàn)1. Calendar.getInstance() 創(chuàng)建日歷對象
2. JDBC DriverManager 獲取數(shù)據(jù)庫連接
3. Spring BeanFactory 創(chuàng)建和管理 Bean
建造者模式分步構(gòu)建復(fù)雜對象,鏈?zhǔn)秸{(diào)用1. StringBuilder.append() 構(gòu)建字符串
2. Spring Security User.withDefaultPasswordEncoder()
3. Lombok @Builder 自動生成建造者
原型模式通過克隆創(chuàng)建對象,避免重復(fù)初始化1. Object.clone() 方法
2. JDK ArrayListclone() 實(shí)現(xiàn)
3. Spring Bean 的 prototype 作用域

二、結(jié)構(gòu)型模式(Structural Patterns)

2.1 高頻核心模式

模式核心目的Java/框架中的應(yīng)用場景
代理模式為對象提供代理,控制訪問或增強(qiáng)功能1. Spring AOP 動態(tài)代理(JDK 動態(tài)代理/CGLIB)
2. MyBatis Mapper 接口 的代理實(shí)現(xiàn)
3. RMI 遠(yuǎn)程代理 實(shí)現(xiàn)跨 JVM 調(diào)用
裝飾器模式動態(tài)為對象添加職責(zé),透明擴(kuò)展1. Java IO 流BufferedInputStream 裝飾 FileInputStream
2. Spring Cache 裝飾器 增強(qiáng)方法緩存
3. Servlet Filter 鏈 裝飾 HTTP 請求處理
適配器模式轉(zhuǎn)換接口,使不兼容類協(xié)同工作1. Arrays.asList() 將數(shù)組適配為 List
2. Spring MVC HandlerAdapter 適配不同 Controller
3. JPA 的 JpaVendorAdapter 適配不同數(shù)據(jù)庫
外觀模式為子系統(tǒng)提供統(tǒng)一入口,簡化調(diào)用1. Spring JdbcTemplate 封裝 JDBC 復(fù)雜操作
2. SLF4J 門面 統(tǒng)一日志框架(Logback/Log4j)
3. Tomcat RequestFacade 封裝 ServletRequest

2.2 中等頻率模式

模式核心目的Java/框架中的應(yīng)用場景
組合模式樹形結(jié)構(gòu),統(tǒng)一處理單個(gè)對象和組合對象1. Java Swing GUI 組件(Container 包含 Component)
2. JSF UIComponent 樹
3. 組織結(jié)構(gòu)樹(員工與部門統(tǒng)一接口)
橋接模式分離抽象與實(shí)現(xiàn),獨(dú)立擴(kuò)展1. JDBC 驅(qū)動橋接(Driver 橋接不同數(shù)據(jù)庫協(xié)議)
2. Spring 的橋接模式 在 Bean 定義與實(shí)現(xiàn)間
3. AWT 的 Peer 架構(gòu)(跨平臺 GUI)
享元模式共享細(xì)粒度對象,節(jié)省內(nèi)存1. String 字符串常量池(如 "abc" 復(fù)用)
2. Integer.valueOf() 緩存 -128~127 對象
3. 數(shù)據(jù)庫連接池 復(fù)用連接對象

三、行為型模式(Behavioral Patterns)

3.1 高頻核心模式

模式核心目的Java/框架中的應(yīng)用場景
策略模式封裝算法族,運(yùn)行時(shí)動態(tài)切換1. Spring Resource 策略 加載(classpath/file/url)
2. Collections.sort() 傳入 Comparator 策略
3. 支付系統(tǒng) 支持微信/支付寶/銀聯(lián)多策略
觀察者模式發(fā)布-訂閱,一對多依賴通知1. Java EventListener(如 ServletContextListener)
2. Spring ApplicationEvent 事件驅(qū)動(如 ContextRefreshedEvent)
3. Guava EventBus 組件解耦
模板方法模式定義算法骨架,子類實(shí)現(xiàn)細(xì)節(jié)1. Spring JdbcTemplate 執(zhí)行流程模板
2. HttpServletservice() 模板方法(doGet/doPost)
3. AbstractApplicationContext 的 refresh() 模板
責(zé)任鏈模式鏈?zhǔn)絺鬟f請求,松散耦合1. Servlet Filter 鏈(認(rèn)證→日志→鑒權(quán))
2. Spring Security FilterChain 安全過濾
3. Netty ChannelPipeline 責(zé)任鏈處理 IO 事件
迭代器模式順序訪問聚合對象元素1. Java Iterator/Iterable 接口(ArrayList.iterator()
2. MyBatis Cursor 游標(biāo)迭代大數(shù)據(jù)
3. Guava FluentIterable 增強(qiáng)迭代
命令模式封裝請求為對象,支持撤銷/隊(duì)列1. Runnable/Callable 封裝任務(wù)
2. Spring JmsTemplate 發(fā)送消息命令
3. 撤銷/重做功能(編輯器歷史棧)
狀態(tài)模式對象行為隨狀態(tài)改變而改變1. 線程 Thread.State 枚舉(NEW/RUNNABLE/BLOCKED)
2. 訂單狀態(tài)機(jī)(待支付→已支付→已發(fā)貨)
3. Game 角色狀態(tài)(正常/眩暈/冰凍)

3.2 中等頻率模式

模式核心目的Java/框架中的應(yīng)用場景
備忘錄模式保存對象狀態(tài),支持恢復(fù)1. Serializable 序列化 保存對象狀態(tài)
2. Git 版本控制 保存代碼歷史
3. 游戲存檔/讀檔
中介者模式封裝對象交互,降低耦合1. Java Concurrency Executor 協(xié)調(diào)線程
2. Spring MVC DispatcherServlet 協(xié)調(diào) Controller/View
3. 消息隊(duì)列中間件 解耦服務(wù)
訪問者模式分離操作與對象結(jié)構(gòu)1. Java AnnotationValueVisitor 注解處理
2. 編譯器 AST 遍歷
3. 報(bào)表導(dǎo)出(同一數(shù)據(jù)導(dǎo)出 CSV/PDF/Excel)
解釋器模式定義語法規(guī)則,解釋執(zhí)行1. Java 正則表達(dá)式 Pattern
2. Spring SpEL 表達(dá)式#{...}
3. SQL 解析器(如 Druid SQL Parser)

四、設(shè)計(jì)模式在主流框架中的體現(xiàn)

Spring Framework

// 單例模式:Bean 默認(rèn)作用域
@Component  // 默認(rèn) singleton
public class UserService { ... }

// 工廠模式:BeanFactory 創(chuàng)建 Bean
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
UserService service = ctx.getBean(UserService.class);

// 代理模式:AOP 動態(tài)代理
@Aspect
public class LogAspect {
    @Around("execution(* com.example.*.*(..))")
    public Object log(ProceedingJoinPoint pjp) { ... }
}

// 模板方法:JdbcTemplate
jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> new User(rs));

MyBatis

// 代理模式:Mapper 接口代理
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectById(Long id);
}
// MyBatis 自動生成代理實(shí)現(xiàn)類

// 建造者模式:SqlSessionFactoryBuilder
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
    .build(inputStream);

JDK 核心庫

// 裝飾器模式:IO 流
InputStream is = new BufferedInputStream(
    new FileInputStream("file.txt")
);

// 迭代器模式:集合遍歷
List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();

// 單例模式:Runtime
Runtime runtime = Runtime.getRuntime();
runtime.exec("ls -l");

五、選型決策指南

場景需求推薦模式避免場景
全局共享資源單例模式頻繁創(chuàng)建銷毀
對象創(chuàng)建復(fù)雜建造者/工廠模式在業(yè)務(wù)代碼硬編碼 new
需要?jiǎng)討B(tài)擴(kuò)展功能裝飾器/代理模式繼承層級過深
處理流程固定,步驟可變模板方法模式重復(fù)代碼
多策略切換策略模式if-else 地獄
組件解耦/事件驅(qū)動觀察者/中介者模式直接依賴調(diào)用
樹形結(jié)構(gòu)管理組合模式遞歸處理復(fù)雜
跨接口兼容適配器模式修改原有代碼

黃金法則:優(yōu)先使用創(chuàng)建型模式解耦對象創(chuàng)建,用結(jié)構(gòu)型模式優(yōu)化代碼組織,用行為型模式提升擴(kuò)展性。在框架開發(fā)中多使用代理/裝飾器,業(yè)務(wù)開發(fā)中多使用策略/模板方法。

到此這篇關(guān)于Java常用設(shè)計(jì)模式及應(yīng)用場景的文章就介紹到這了,更多相關(guān)Java設(shè)計(jì)模式及應(yīng)用場景內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Object toString方法原理解析

    Java Object toString方法原理解析

    這篇文章主要介紹了Java Object toString方法原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Springboot常用方法參數(shù)注解示例詳解

    Springboot常用方法參數(shù)注解示例詳解

    這篇文章主要介紹了Springboot常用方法參數(shù)注解及示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java調(diào)用Redis集群代碼及問題解決

    Java調(diào)用Redis集群代碼及問題解決

    這篇文章主要介紹了Java調(diào)用Redis集群代碼及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決

    springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決

    這篇文章主要介紹了springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 迪米特法則_動力節(jié)點(diǎn)Java學(xué)院整理

    迪米特法則_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了迪米特法則,迪米特法則就是一個(gè)在類創(chuàng)建方法和屬性時(shí)需要遵守的法則,有興趣的可以了解一下
    2017-08-08
  • java對指定目錄下文件讀寫操作介紹

    java對指定目錄下文件讀寫操作介紹

    本文將詳細(xì)介紹java對指定目錄下文件的讀寫功能實(shí)現(xiàn),需要的朋友可以參考下
    2012-11-11
  • SpringBoot整合mybatis-plus快速入門超詳細(xì)教程

    SpringBoot整合mybatis-plus快速入門超詳細(xì)教程

    mybatis-plus 是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,本文給大家分享SpringBoot整合mybatis-plus快速入門超詳細(xì)教程,一起看看吧
    2021-09-09
  • springboot 跨域配置類及跨域請求配置

    springboot 跨域配置類及跨域請求配置

    這篇文章主要介紹了springboot 跨域配置類及跨域請求配置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Springboot?如何使用BindingResult校驗(yàn)參數(shù)

    Springboot?如何使用BindingResult校驗(yàn)參數(shù)

    這篇文章主要介紹了Springboot?如何使用BindingResult校驗(yàn)參數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Mybatis關(guān)聯(lián)查詢之一對多和多對一XML配置詳解

    Mybatis關(guān)聯(lián)查詢之一對多和多對一XML配置詳解

    這篇文章主要介紹了Mybatis關(guān)聯(lián)查詢之一對多和多對一XML配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論

阜新市| 江山市| 饶阳县| 和田市| 罗田县| 将乐县| 湘乡市| 龙陵县| 花莲市| 保德县| 石城县| 徐水县| 青田县| 涿鹿县| 广南县| 汤原县| 额济纳旗| 邢台县| 甘孜县| 宣城市| 隆子县| 正阳县| 石柱| 沙田区| 开鲁县| 绥宁县| 环江| 华坪县| 侯马市| 宁德市| 右玉县| 宜城市| 吉水县| 潮安县| 林口县| 济阳县| 嘉禾县| 平谷区| 凌海市| 淅川县| 东乡|