GoF、J2EE 设计模式
生活随笔
收集整理的這篇文章主要介紹了
GoF、J2EE 设计模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- `GoF`
- 1、單例模式(Singleton)
- 2、觀察者模式
- 3、工廠模式(Factory)
- 4、抽象工廠模式
- 5、代理模式
- 5.1 動態(tài)代理
- 5.2 靜態(tài)代理
- 6、原型模式
- `J2EE`
- 1、MVC模式
思維導圖(詳見博文資源)
學習資源
https://www.runoob.com/design-pattern/proxy-pattern.html
https://refactoringguru.cn/design-patterns/factory-method
GoF
1、單例模式(Singleton)
重要思想:構(gòu)造器私有 (別人無法new這個對象)保證只有單個對象被創(chuàng)建
1、餓漢式:不管三七二十一,上來先把對象加載出來
多線程安全
缺點::類加載時就初始化,浪費內(nèi)存(拿數(shù)組來說,有的數(shù)組new出來后以后可能并沒用到)
public class Hungry {private Hungry() {}private static final Hungry HUNGRY = new Hungry();public static Hungry getInstance() {return HUNGRY;} }2、懶漢式:
①線程不安全
public class LazyMan {private LazyMan() {}private static LazyMan lazyMan;public static LazyMan getInstance() {if (lazyMan == null) {lazyMan = new LazyMan();}return lazyMan;} }②線程安全: DCL(double-checked locking)懶漢式
volatile:原子性操作 -> 避免指令重排
靜態(tài)內(nèi)部類
多線程安全
public class Holder {private Holder() {}public static Holder getInstance() {return InnerClass.HOLDER;}public static class InnerClass {private static final Holder HOLDER = new Holder();} }單例不安全:反射可破壞單例
2、觀察者模式
適合應用場景:
- 當一個對象狀態(tài)的改變需要改變其他對象, 或?qū)嶋H對象是事先未知的或動態(tài)變化的時, 可使用觀察者模式。
- 當你使用圖形用戶界面類時通常會遇到一個問題。 比如, 你創(chuàng)建了自定義按鈕類并允許客戶端在按鈕中注入自定義代碼, 這樣當用戶按下按鈕時就會觸發(fā)這些代碼。
- 當應用中的一些對象必須觀察其他對象時, 可使用該模式。 但僅能在有限時間內(nèi)或特定情況下使用。
- 訂閱列表是動態(tài)的, 因此訂閱者可隨時加入或離開該列表。
3、工廠模式(Factory)
簡單工廠模式 :對于增加新的產(chǎn)品,需要擴展已有代碼
優(yōu)點:方便調(diào)用者使用對象
缺點:沒有滿足開閉原則 -> 雖然某種程度不符合設計原則,但實際使用最多
工廠方法模式:不修改已有類的前提下,通過增加新的工廠類實現(xiàn)擴展
二者對比
4、抽象工廠模式
- 圍繞一個超級工廠創(chuàng)建其他工廠,該工廠又稱為其他工廠的工廠
- 在抽象工廠模式中,接口是負責創(chuàng)建一個相關(guān)對象的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供對象。
- 不可以增加產(chǎn)品,可以增加產(chǎn)品族
UML類圖
舉例
5、代理模式
應用實例:Spring AOP
5.1 動態(tài)代理
5.2 靜態(tài)代理
6、原型模式
J2EE
1、MVC模式
總結(jié)
以上是生活随笔為你收集整理的GoF、J2EE 设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node --- 监听文件变化(静态、
- 下一篇: es6 --- Promise封装读取