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

Java常用設(shè)計(jì)模式及應(yīng)用場(chǎ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)用場(chǎng)景的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

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

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

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

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

2.1 高頻核心模式

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

2.2 中等頻率模式

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

三、行為型模式(Behavioral Patterns)

3.1 高頻核心模式

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

3.2 中等頻率模式

模式核心目的Java/框架中的應(yīng)用場(chǎng)景
備忘錄模式保存對(duì)象狀態(tài),支持恢復(fù)1. Serializable 序列化 保存對(duì)象狀態(tài)
2. Git 版本控制 保存代碼歷史
3. 游戲存檔/讀檔
中介者模式封裝對(duì)象交互,降低耦合1. Java Concurrency Executor 協(xié)調(diào)線程
2. Spring MVC DispatcherServlet 協(xié)調(diào) Controller/View
3. 消息隊(duì)列中間件 解耦服務(wù)
訪問(wèn)者模式分離操作與對(duì)象結(jié)構(gòu)1. Java AnnotationValueVisitor 注解處理
2. 編譯器 AST 遍歷
3. 報(bào)表導(dǎo)出(同一數(shù)據(jù)導(dǎo)出 CSV/PDF/Excel)
解釋器模式定義語(yǔ)法規(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 動(dòng)態(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 自動(dòng)生成代理實(shí)現(xiàn)類

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

JDK 核心庫(kù)

// 裝飾器模式: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");

五、選型決策指南

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

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

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

相關(guān)文章

  • Java Object toString方法原理解析

    Java Object toString方法原理解析

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

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

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

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

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

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

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

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

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

    java對(duì)指定目錄下文件讀寫操作介紹

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

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

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

    springboot 跨域配置類及跨域請(qǐng)求配置

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

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

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

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

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

最新評(píng)論

乐亭县| 清新县| 曲靖市| 安岳县| 龙州县| 滦南县| 酒泉市| 游戏| 通州区| 讷河市| 北京市| 高碑店市| 汝城县| 海安县| 靖州| 砚山县| 田林县| 光泽县| 寿阳县| 弥勒县| 怀柔区| 如东县| 安丘市| 漾濞| 增城市| 贵德县| 兰西县| 禄丰县| 白河县| 凌海市| 台前县| 呼玛县| 托里县| 涿鹿县| 中阳县| 陆丰市| 安岳县| 抚远县| 本溪市| 资中县| 莫力|