那些被時間沉淀下來的最賤時間,就是設計模式,它有利於提高溝通和設計的效率和質量。
我是李福春,我在准備面試,今天的問題是:
工作中你用到了哪些設計模式?
**分析:**
這個問題比較open, 可以結合以往項目經歷中用到的設計模式,挑選2個左右的例子出來講解,講講為什么要使用設計模式,帶來了哪些優點和不便。
如果實在找不出來,可以結合jdk和spring,每個挑一兩個地方來講2種左右的設計模式,相信面試官也會比較滿意。
**我的回答:**
設計模式是程序員在設計過程中多年的最佳實踐沉淀,可以提高工程師之間研發質量,溝通效率。
我在X游戲接入平台中使用了模板方法模式,場景:研發的游戲需要推向不同的渠道,每個渠道的用戶登錄和充值接口的實現都不太一樣,而X游戲平台作為一個游戲接入不同渠道的服務平台需要保證游戲接入的一致性,以及消除到不同渠道的差異性。
使用模板方法的好處:
- 固定了游戲接入的流程:都有登錄,充值接入;
- 解耦了協議和實現:每個渠道按照對應的對接協議差別的接入,在上層抹掉差差異。
- 擴展性更好;可以輕松的增加新渠道;
- 可以更靈活處理游戲接入;
我在優化登錄代碼的過程中,使用了觀察者模式。比如可以使用Spring的事件機制或者guava提供的EventBus;
之前的登錄代碼是面條式的,一行代碼處理一個對應的邏輯,比如,登錄完成之后,記錄日志,通知積分服務增加積分,通知統計服務增加登錄次數,變更日活;
使用觀者模式之后,發一個登錄成功的消息,在監聽者中處理不同的邏輯操作。簡化了代碼,可維護性,可擴展性得到了提高。
最后可以盤點一下設計模式的分類和列舉。如本篇的title圖。
jdk中用到的設計模式盤點
裝飾器模式:java.io中的流處理;
建造者模式:Http2/client的構建;
單例模式: Runtime類, 單例模式主要在高並發的情況下,需要加入雙檢鎖,或者直接使用枚舉單例的方式。
spring中常用設計模式盤點
工廠模式: BeanFactory, ApplicationContext中的對象創建;
觀察者模式: 各種事件的發布和通知
模板模式: JdbcTemplate
AOP: 綜合了代理,裝飾器,適配器模式
小結
本篇按照我的經驗回答了工作中的設計模式例子,同時延伸到設計模式的分類和列舉,如果工作中實在想不出來用到了哪些設計模式,
可以以jdk,spring中使用到的設計模式為例剖析一下設計模式的使用以及帶來的好處。
原創不易,轉載請注明出處。