- 一、什么是設(shè)計模式
- 二尖昏、為什么要使用設(shè)計模式仰税?
- 三、何時使用設(shè)計模式
- 四抽诉、六大設(shè)計原則
- 五陨簇、不遵循設(shè)計模式可能會導致的問題
- 六、什么是高內(nèi)聚迹淌、低耦合河绽、強耦合
- 七、業(yè)務(wù)邏輯中的設(shè)計模式及原則
- 八唉窃、框架中的常用設(shè)計模式
- 九耙饰、設(shè)計模式總結(jié)
- 十、實現(xiàn)和繼承的區(qū)別和聯(lián)系
- 十一纹份、SOA和微服務(wù)的關(guān)聯(lián)及區(qū)別
一榔幸、什么是設(shè)計模式
定義:是一套被反復使用的,多數(shù)人知曉的、經(jīng)過分類編目的削咆、代碼設(shè)計經(jīng)驗總結(jié)
特性一:面向?qū)ο?br>
特性二:與具體的語言無關(guān)
二牍疏、為什么要使用設(shè)計模式?
- 可擴展
- 可復用
- 可維護
-
抽象類
提高了類和類的內(nèi)聚程度拨齐,減少了代碼量鳞陨。
三、何時使用設(shè)計模式
- 有一定代碼編寫經(jīng)驗和理解后
- 合適場景+匹配問題+清晰的解決方案
-
重構(gòu)
:通過調(diào)整代碼結(jié)構(gòu)改善軟件的質(zhì)量瞻惋、性能厦滤、使其程序的設(shè)計模式和架構(gòu)更趨合理,提高軟件的擴展性和可維護性歼狼。
四掏导、六大設(shè)計原則
-
單一職責原則 SRP
- 有且僅有一個原因能引起類變化
- 用職責或變化和衡量
-
里氏替換原則
- 所有引用基類的地方必須能無感知的使用其子類
- 子類可擴展父類功能,但不要修改父類功能
-
依賴倒置原則
- 面向接口編程
-
接口隔離原則
- 接口盡量細化羽峰,化為最小功能單元
- 不使用接口不要依賴
-
迪米特法則
- 也叫最少知道原則趟咆,一個對象對其他對象有最少的了解
- Only talk to your Immediate friends
- 依賴、關(guān)聯(lián)梅屉、聚合值纱、組合
-
開閉原則
- 對擴展開放,對修改關(guān)閉
- 抽象約束坯汤,封裝變化
五虐唠、不遵循設(shè)計模式可能會導致的問題
技術(shù)負債
:
例1:
小明需要開開發(fā)一個用戶模塊,其中涉及一些復雜的操作惰聂,比如用戶數(shù)據(jù)接收和處理疆偿,這時小明為了省事,把多個模塊之間需要交互的代碼都融合到了一起搓幌,將原本需要2天的工作量杆故,用了1天完成了。
但過了段時間鼻种,項目升級迭代,涉及接收用戶數(shù)據(jù)的部分有了大的變動沙热,這時因為原本的代碼不遵循任何規(guī)范叉钥,亂糟糟的在一起,需要進行大面積的修改篙贸,甚至是刪掉重寫投队,此時工作量翻了不止倍,小明給自己挖了個巨坑爵川,需要加班加點的填坑敷鸦!
例2:
一個服務(wù)節(jié)點 5000QPS,小明在寫程序的時候,處理的非常差扒披,導致1一個節(jié)點只能有1000QPS值依,這時需要處理5000QPS,就需要使用5臺機器才能解決問題碟案,這就導致了成本增加
六愿险、什么是高內(nèi)聚、低耦合价说、強耦合
高內(nèi)聚
:A模塊以及擁有它應(yīng)該擁有的所有功能辆亏,不需要依賴其他的模塊,拆到不能再拆(微服務(wù)的最小服務(wù)鳖目、最小原子操作)
低耦合
:模塊之間依賴程度較低扮叨,某一個模塊變動或者是出故障的時候
例如:A模塊依賴B模塊,B接口依賴领迈,B出問題彻磁,A不受影響,這是低耦合
但是如果惦费,A同時受到影響兵迅,不能正常運行,這就是
強耦合
七薪贫、業(yè)務(wù)邏輯中的設(shè)計模式及原則
-
單一職責原則
業(yè)務(wù)分層(水平+垂直)Spring MVC恍箭、Controller、Service瞧省、Dao
-
依賴導致原則
Service扯夭、Dao等,都有接口和Impl實現(xiàn)類
-
迪米特法則
水平分層鞍匾,如Controller和Service
-
多種模式組合使用
Dao層:Facade外觀模式交洗、Proxy代理模式、Strategy策略模式
Service層:業(yè)務(wù)自定義
八橡淑、框架中的常用設(shè)計模式
Spring中的常用的設(shè)計模式
-
Factory Pattern 工廠模式
- BeanFactory
- ApplicationContext
-
Singleton 單例模式
- ApplicationContext
-
Prototype原型模式
- scope = prototype
-
Proxy Pattern 代理模式
- AOP
-
Delegate Proxy委派模式
- DispatchServlet
- BeanDefinitionParserDelegate
-
Observer Pattern 觀察者模式
- ContextLoaderListener
-
Adapter 適配器模式
- HandlerAdapter
-
Other Pattern 其他設(shè)計模式
- 策略模式构拳、模板方法模式
Mybatis中常用的設(shè)計模式
- 工廠模式
- SqlSessionFactory
- 單例模式
- SqlSessionFactory
- 代理模式
- MapperProxy、ConnectionLogger等用了動態(tài)代理
- 模板方法模式
- BaseExecutor梁棠、SimpleExecutor置森、BaseTypeHandler
- 裝飾者模式
- cache包里decorators下的所有decorators實現(xiàn)類
- 迭代器模式
- PropertyTokenizer
架構(gòu)中常用的設(shè)計模式
- MVC模式
- 黑板模式
- 主從模式
- SOA模式
- 微服務(wù)模式
九、設(shè)計模式總結(jié)
經(jīng)驗復用 | 可擴展 | 邏輯中 |
---|---|---|
可自創(chuàng) | 可復用 | 工具及框架中 |
解決問題 | 可我IE胡 | 架構(gòu)中 |
UML圖一定要會畫符糊,面試時如果問到設(shè)計模式凫海,畫UML是必經(jīng)過程
十、實現(xiàn)和繼承的區(qū)別和聯(lián)系
首先我們都知道Java是單繼承男娄、多實現(xiàn)
extends:一個類繼承了父類行贪,則擁有父類的所有非私有功能漾稀,它是有具體實現(xiàn)功能的,所有子類從父類繼承的方法都是同樣的行為
Implement:接口建瘫,比較抽象崭捍,是只做定義,具有的功能交于實現(xiàn)類去根據(jù)需要進行不同行為
的實現(xiàn)
十一暖混、SOA和微服務(wù)的關(guān)聯(lián)及區(qū)別
這里說下我對SOA和微服務(wù)的理解缕贡,由于沒有實際經(jīng)營,如有問題拣播,還請多多指教晾咪!
SOA:主要在于解決多服務(wù)之間相互調(diào)用的問題,也就是服務(wù)治理贮配,根據(jù)職能將模塊抽取出來谍倦,提供一個公共服務(wù)供多個模塊進行調(diào)用,著重中央管理泪勒。
微服務(wù):每個服務(wù)都是聚焦單個小型的業(yè)務(wù)功能昼蛀,私有的數(shù)據(jù)庫,數(shù)據(jù)去中心化圆存,降低服務(wù)直接的耦合度叼旋,每個服務(wù)都可以獨立部署,它是高內(nèi)聚
沦辙、松耦合
著重分散管理