之前學得不踏實,重新復習中。
記錄 圖解Java設計模式-尚硅谷_韓順平 & 【23種設計模式】概述-狂神說Java-秦疆
設計模式
GoF 23 23種設計模式 三類 創建型 結構型 行為型
設計模式的重要性

設計模式的重要性
軟件工程中,設計模式(design pattern)是對軟件設計中普遍存在(反復出現) 的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人 在1990年代從建築設計領域引入到計算機科學的
大廈 VS 簡易房 復雜 簡單
拿實際工作經歷來說, 當一個項目開發完后,如果客戶提出增新功能,怎么辦?。(可擴展性,使用設計模式,軟件具有很好的擴展性)
如果項目開發完后,原來程序員離職,你接手維護該項目怎么辦?
(維護性[可讀性、規范性])
目前程序員門檻越來越高,一線IT公司(大廠),都會問你在實際項目中使用過什么 設計模式,怎樣使用的,解決了什么問題。
面試中問 你用過什么設計模式?怎么使用的,解決了什么問題。
設計模式在軟件中哪里?
面向對象(OO)=>功能模塊[設計模式+算法(數據結構)]=>框架[使用到多種設計模式]=>架構 [服務器集群]
功能模塊 框架 架構 設計模式
如果想成為合格軟件工程師,那就花時間來研究下設計模式是非常必要的。
我必須做一個合格軟件工程師
程序員多,公司選人,那就多問一些有水平的問題。
實際項目中用過什么設計模式?怎么使用?解決了什么問題呢?
你說你用過?告訴我你怎么用的,解決了什么樣的問題?回答
實際項目 源碼 落地
面向對象編程 OO
面向對象語言 寫功能模塊 功能模塊集成到各種框架中 框架形成架構
設計模式 + 算法(數據結構)
框架使用到多種設計模式
Spring 框架 架構 服務器集群
項目 - > 功能 用啥設計模塊?
MyBatis用到什么設計模式?
架構 多種框架集合
工程的概念
設計模式虛?感覺一直都在的 😂 用 問
設計模式七大原則 23種設計模式
有幾種包含 工廠模式 三種 簡單工廠模式 工廠方法模式 抽象工廠模式
適配器模式 三種
學習過程中 高效 愉快
高效而愉快的學習 , 設計模式很有用,其實也很好玩,很像小時候搭積木, 怎樣搭建更加穩定,堅固。
怎么搭建呢 ? 積木 高 穩定
設計模式很重要,因為包含很多編程思想,還是有一定難度的。
設計模式有一定難度 這么麻煩 很無聊 一個很簡單的問題 為什么要弄這么麻煩呢? 實際開發中,實現一個功能沒必要那么麻煩呀?怎么弄得這么啰里啰唆得.
設計模式要解決的問題,站的角度是不一樣的,它是希望我們軟件站在一個比較大的,一個軟件,軟件系統結構體系角度,具有一個更好的擴展性、復用性、穩定性的角度來思考的,不僅僅站在一個功能實現的角度來思考完成。
設計模式理解起來有些吃力。
采用 應用場景->設計模式->剖析原理->分析實現步驟(圖解)->代碼 實現-> 框架或項目源碼分析(找到使用的地方) 的步驟講解 [比如: 建造者 模 式 ]
提個問題大家想,有一個功能實現,傳統的,設計模式的。
某個設計模式一定了解,再去分析框架實際項目 。
提出一個實際需求-蓋房問題

使用傳統的方法開完成-蓋房問題

有問題,引出
傳統的方式解決蓋房問題問題分析,引出建造者模式

建造者模式原理分析

建造者模式原理結構圖

形象 具有的
對比的
建築者模式解決蓋房問題思路分析+代碼實現

好,好在那里? 對比
UML 類圖
建造者模式在JDK、SSM的應用和源碼分析

課程目標:讓大家掌握本質 , 達能在工作中靈活運用解決實際問題和
優化程序結構的目的.
設計模式 挺好玩的 ,挺有意思的。寫得東西漂亮、效率高 帶勁
設計模式的目的

設計模式的目的
編寫軟件過程中,程序員面臨着來自耦合性,內聚性以及可維護性,可擴展性,重用性,靈活性等多方面的挑戰,設計模式是為了讓程序(軟件),具有更好代碼
重用性 (即:相同功能的代碼,不用多次編寫)
可讀性 (即:編程規范性, 便於其他程序員的閱讀和理解)
可擴展性 (即:當需要增加新的功能時,非常的方便,稱為可維護性)
可靠性(即:當我們增加新的功能后,對原來的功能沒有影響)
使程序呈現高內聚,低耦合的特性
耦合性很低
高內聚 模塊內部是非常緊密的
低耦合 模塊與模塊之間,功能與功能之間 耦合性很低 依賴性很低
模塊A出錯不影響模塊B
設計模式是為了讓軟件(程序),具有更好代碼重用性、可讀性、可擴展性、可靠性,使程序高內聚、低耦合。
分享金句:
設計模式包含了面向對象的精髓,“懂了設計模式,你就懂了面向對象分析和設計
(OOA/D)的精要”
Scott Mayers 在其巨著《Effective C++》就曾經說過:C++老手和 C++新手的區別就是前者手背上有很多傷疤
懂了設計模式,就懂了面向對象分析和設計的精要
面向對象 封裝 繼承 多態 面向接口編程 體現在設計模式中 靈活運用
面向對象 高一層次 功能模塊 功能模塊用到很多設計模塊
設計模式基於很多面向對象的特性
老手 手上 傷疤 吃了很多坑 走了很多彎路 成長起來 踩了很多坑 原來是這樣寫代碼的 對我這個新手 坑 爬起來 坑 爬起來 坑 爬起來 留下很多傷疤
傷痕累累
設計模式是為了解決這樣的問題? 那原則是什么呢?
23種設計模式之所以這么設計,遵守的原則 設計模式七大原則
設計模式七大原則
設計模式原則,其實就是程序員在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式為什么這樣設計的依據)

設計模式怎么這樣設計的依據 設計模式原則

開閉原則 : 對擴展開放,對修改關閉。
里氏替換原則: 繼承必須確保超類所擁有的性質在子類中仍然成立
依賴倒置原則: 要面向接口編程,不要面向實現編程
單一職責原則: 控制類的粒度大小 將對象解耦 提高其內聚性
接口隔離原則: 要為各個類建立它們需要的專用接口
迪米特法則: 只與你的直接朋友交談,不跟"陌生人"說話.
合成復用原則: 盡量先使用組合或者聚合等關聯關系來實現,其次才考慮使用繼承關系來實現
設計原則核心思想
- 找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代 碼混在一起。
- 針對接口編程,而不是針對實現編程。
- 為了交互對象之間的松耦合設計而努力
代碼 設計 松耦合
掌握設計模式的層次
掌握設計模式的層次
第1層:剛開始學編程不久,聽說過什么是設計模式
第2層:有很長時間的編程經驗,自己寫了很多代碼,其中用到了設計模式,但
是自己卻不知道
第3層:學習過了設計模式,發現自己已經在使用了,並且發現了一些新的模式
挺好用的
第4層:閱讀了很多別人寫的源碼和框架,在其中看到別人設計模式,並且能夠 領會設計模式的精妙和帶來的好處。
第5層:代碼寫着寫着,自己都沒有意識到使用了設計模式,並且熟練的寫了出
來。
孤獨求敗5重
新手
我還沒做開發,一直學中做小案例中 😂
高手 底層框架 領會到設計模式精妙
本質的東西 結構 不是形式 優化
難 輕松解決
不是功能角度 考慮 軟件 系統 結構
什么是設計模式?
設計模式介紹
設計模式是程序員在面對同類軟件工程設計問題所總結出來的有用的經驗, 模式不是代碼,而是某類問題的通用解決方案,設計模式(Design pattern) 代表了最佳的實踐。這些解決方案是眾多軟件開發人員經過相當長的一段時 間的試驗和錯誤總結出來的。
設計模式的本質提高 軟件的維護性,通用性和擴展性,並降低軟件的復雜 度。
<<設計模式>> 是經典的書,作者是 Erich Gamma、Richard Helm、Ralph
Johnson 和 John Vlissides Design(俗稱 “四人組 GOF”)
設計模式並不局限於某種語言,java,php,c++ 都有設計模式.
某類問題的通用解決方案 普遍的問題 模式 最佳實踐
做開發 就要用到設計模式 設計模式是站在 軟件 開發 結構 系統 角度看待的.

設計模式(Design Pattern)是前輩們對代碼開發經驗的總結,是解決特定問題的一系列套路。它不是語法規定,而是一套用來提高代碼可復用性、可維護性、可讀性、健壯性以及安全性的解決方案。
1995年,GoF(Gang of four 四人幫)合作出版了《設計模式:可復用面向對象軟件的基礎》一書,共收錄了23種設計模式,從此樹立了軟件設計模式領域的里程碑,人稱 GoF設計模式。
設計模式類型
設計模式分為三種類型,共23種 變種
創建型模式:單例模式、抽象工廠模式、原型模式、建造者模式、工廠模式。
對象的創建 怎么去設計 抽象工廠、工廠都是屬於工廠模式的
單例模式 某個類實例只有一個
原型模式 怎么去克隆一個對象 深拷貝 還是淺拷貝
結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享
元模式、代理模式。
軟件結構角度來思考的 系統 結構 伸縮性 彈性 擴展性
裝飾 類爆炸
行為型模式:模版方法模式、命令模式、訪問者模式、迭代器模式、觀察者模 式、中介者模式、備忘錄模式、解釋器模式(Interpreter模式)、狀態模式 、策略模式、職責鏈模式(責任鏈模式)。
行為主要是站在方法角度思考與設計的, 怎么去設計方法 更合理 方法調用
注意:不同的書籍上對分類和名稱略有差別
設計模式:可復用面向對象軟件的基礎

我有,我有 , 剛上大學的時候京東圖書優惠賊大買了一大堆計算機界的經典書籍,一直吃灰中,是時候拿出來看看了,留給我的時間不多了 😂。
設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結,代表了最佳的實踐, 通常被有經驗的面向對象的軟件開發人員所采用。
Christopher Alexander說過:“每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心,這樣,你就能一次又一次地使用該方案而不必做重復勞動“。
使用設計模式是為了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。
設計模式是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案, 這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的。
在項目中合理的運用設計模式可以完美的解決很多問題。
每種模式在現在中都有相應的原理與之對應。
每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的核心解決方案。
面向對象的設計模型很多,但大家認為這23個模式是其他模式的基礎。
**創建型模式 (Creational Patterns) **
這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用 new 運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。
工廠模式 (Factory Pattern)
建造者模式 (Builder Pattern)
抽象工廠模式( Abstract Factory Pattern)
原型模式 (Prototype Pattern)
單例模式 (Singleton Pattern)
**結構型模式 (Structural Patterns) **
這些設計模式關注類和對象的組合。繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。
適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
過濾器模式(Filter、Criteria Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
**解釋器模式 (Behavioral Patterns) **
這些設計模式特別關注對象之間的通信。
責任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態模式(State Pattern)
空對象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
訪問者模式(Visitor Pattern)
另一類設計模式:J2EE 設計模式。
這些設計模式特別關注表示層。這些模式是由 Sun Java Center 鑒定的。
MVC 模式(MVC Pattern)
業務代表模式(Business Delegate Pattern)
組合實體模式(Composite Entity Pattern)
數據訪問對象模式(Data Access Object Pattern)
前端控制器模式(Front Controller Pattern)
攔截過濾器模式(Intercepting Filter Pattern)
服務定位器模式(Service Locator Pattern)
傳輸對象模式(Transfer Object Pattern)
GOF 23
學習設計模式的意義

設計模式的本質是面向對象設計原則的實際運用,是對類的封裝性、繼承性和多態性以及類的關聯關系和組合關系的充分理解。
正確使用設計模式具有以下優點:
- 可以提高程序員的思維能力、編程能力和設計能力
- 使程序設計更加標准化、代碼編制更加工程化,使軟件開發效率大大提高,從而縮短軟件的開發周期。
- 使軟件的代碼可重用性高、可讀性強、可靠性高、靈活性好、可維護性強。
最重要的是抽象能力,設計模式是對面對對象設計原則的實際運用,
在公司比較注重開發效率 ,學會它 能過為以后帶來極大的方便 。
思維上
可重用性 直接搬來搬去
開發 安全性高 產品
引導
應用 設計
思想 應用的場景
設計模式 不一定是最好的
設計模式的基本要素

模式名稱
問題
解決方案
效果
問題 特點 功能
為什么設計 ?
單例模式 系統開銷
干什么
模板
優缺點 用 時間 空間 復雜度 平衡
系統的靈活性 可擴展性
G o F 23
個人的能力極大提高
進步 整體 深刻的認識
創建型模式
怎么樣去創建一個對象
對象的創建和使用分離
類和對象 更大的結構 組成
行為型模式
類和對象 相互協作
GoF 23

一種思維,一種態度,一種進步
創建型模式
結構型模式
行為型模式
