GoF、J2EE 设计模式
文章目錄
- `GoF`
- 1、單例模式(Singleton)
- 2、觀察者模式
- 3、工廠模式(Factory)
- 4、抽象工廠模式
- 5、代理模式
- 5.1 動(dòng)態(tài)代理
- 5.2 靜態(tài)代理
- 6、原型模式
- `J2EE`
- 1、MVC模式
思維導(dǎo)圖(詳見(jiàn)博文資源)
學(xué)習(xí)資源
https://www.runoob.com/design-pattern/proxy-pattern.html
https://refactoringguru.cn/design-patterns/factory-method
GoF
1、單例模式(Singleton)
重要思想:構(gòu)造器私有 (別人無(wú)法new這個(gè)對(duì)象)保證只有單個(gè)對(duì)象被創(chuàng)建
1、餓漢式:不管三七二十一,上來(lái)先把對(duì)象加載出來(lái)
多線程安全
缺點(diǎn)::類加載時(shí)就初始化,浪費(fèi)內(nèi)存(拿數(shù)組來(lái)說(shuō),有的數(shù)組new出來(lái)后以后可能并沒(méi)用到)
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、觀察者模式
適合應(yīng)用場(chǎng)景:
- 當(dāng)一個(gè)對(duì)象狀態(tài)的改變需要改變其他對(duì)象, 或?qū)嶋H對(duì)象是事先未知的或動(dòng)態(tài)變化的時(shí), 可使用觀察者模式。
- 當(dāng)你使用圖形用戶界面類時(shí)通常會(huì)遇到一個(gè)問(wèn)題。 比如, 你創(chuàng)建了自定義按鈕類并允許客戶端在按鈕中注入自定義代碼, 這樣當(dāng)用戶按下按鈕時(shí)就會(huì)觸發(fā)這些代碼。
- 當(dāng)應(yīng)用中的一些對(duì)象必須觀察其他對(duì)象時(shí), 可使用該模式。 但僅能在有限時(shí)間內(nèi)或特定情況下使用。
- 訂閱列表是動(dòng)態(tài)的, 因此訂閱者可隨時(shí)加入或離開(kāi)該列表。
3、工廠模式(Factory)
簡(jiǎn)單工廠模式 :對(duì)于增加新的產(chǎn)品,需要擴(kuò)展已有代碼
優(yōu)點(diǎn):方便調(diào)用者使用對(duì)象
缺點(diǎn):沒(méi)有滿足開(kāi)閉原則 -> 雖然某種程度不符合設(shè)計(jì)原則,但實(shí)際使用最多
工廠方法模式:不修改已有類的前提下,通過(guò)增加新的工廠類實(shí)現(xiàn)擴(kuò)展
二者對(duì)比
4、抽象工廠模式
- 圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠,該工廠又稱為其他工廠的工廠
- 在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。
- 不可以增加產(chǎn)品,可以增加產(chǎn)品族
UML類圖
舉例
5、代理模式
應(yīng)用實(shí)例:Spring AOP
5.1 動(dòng)態(tài)代理
5.2 靜態(tài)代理
6、原型模式
J2EE
1、MVC模式
總結(jié)
以上是生活随笔為你收集整理的GoF、J2EE 设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: node --- 监听文件变化(静态、
- 下一篇: 23种设计模式UML图