開發(fā)及常用框架中常見的設(shè)計模式

一榔幸、什么是設(shè)計模式

定義:是一套被反復使用的,多數(shù)人知曉的、經(jīng)過分類編目的削咆、代碼設(shè)計經(jīng)驗總結(jié)
特性一:面向?qū)ο?br> 特性二:與具體的語言無關(guān)

二牍疏、為什么要使用設(shè)計模式?

  • 可擴展
  • 可復用
  • 可維護
  • 抽象類提高了類和類的內(nèi)聚程度拨齐,減少了代碼量鳞陨。

三、何時使用設(shè)計模式

  • 有一定代碼編寫經(jīng)驗和理解后
  • 合適場景+匹配問題+清晰的解決方案

    \color{green}{固定的業(yè)務(wù)常見下+匹配的問題=場景問題}

  • 重構(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)聚沦辙、松耦合著重分散管理



\color{green}{學習參考地址 Java大型互聯(lián)網(wǎng)架構(gòu)師進階課程:}https://ke.qq.com/course/435990



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夫植,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子油讯,更是在濱河造成了極大的恐慌详民,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陌兑,死亡現(xiàn)場離奇詭異沈跨,居然都是意外死亡,警方通過查閱死者的電腦和手機兔综,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門饿凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人软驰,你說我怎么就攤上這事涧窒。” “怎么了碌宴?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵杀狡,是天一觀的道長蒙畴。 經(jīng)常有香客問我贰镣,道長呜象,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任碑隆,我火速辦了婚禮恭陡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘上煤。我一直安慰自己休玩,他們只是感情好,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布劫狠。 她就那樣靜靜地躺著拴疤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪独泞。 梳的紋絲不亂的頭發(fā)上呐矾,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音懦砂,去河邊找鬼蜒犯。 笑死,一個胖子當著我的面吹牛荞膘,可吹牛的內(nèi)容都是我干的罚随。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼羽资,長吁一口氣:“原來是場噩夢啊……” “哼淘菩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起削罩,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瞄勾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弥激,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體进陡,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年微服,在試婚紗的時候發(fā)現(xiàn)自己被綠了趾疚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡以蕴,死狀恐怖糙麦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丛肮,我是刑警寧澤赡磅,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站宝与,受9級特大地震影響焚廊,放射性物質(zhì)發(fā)生泄漏冶匹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一咆瘟、第九天 我趴在偏房一處隱蔽的房頂上張望嚼隘。 院中可真熱鬧,春花似錦袒餐、人聲如沸飞蛹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卧檐。三九已至,卻和暖如春焰宣,著一層夾襖步出監(jiān)牢的瞬間泄隔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工宛徊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留佛嬉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓闸天,卻偏偏與公主長得像暖呕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苞氮,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350