設計模式有哪些?(一張圖就可以了)
.
項目中常用的設計模式
(1)、模板方法模式
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,如jdbcTemplate
(2)、代理模式
spring的Proxy模式在AOP中有體現
(3)、觀察者模式
定義對象的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新
(4)、適配器模式
MethodBeforeAdviceAdapter類。
(5)、策略模式
使用了java的繼承和多態
(6)、單例模式
解決了一個全局使用的類頻繁的創建與銷燬。
(7)、工廠模式
分爲三種:簡單工廠,工廠方法,抽象工廠。
手寫生產者/消費者模式
生產者消費者問題是線程模型中的經典問題:生產者和消費者在同一時間段內共用同一存儲空間,生產者向空間裏生產數據,而消費者取走數據。
實現生產者消費者模式有三點:
(1)、一般使用隊列作爲緩衝區,給生產者和消費者解耦,平衡了生產者和消費者的處理能力。
(2)、構建生產者,隊列滿使得生產者線程阻塞。
(3)、構建消費者,隊列空使得消費者線程阻塞。
BlockingQueue是一個阻塞隊列,它的存取可以保證只有一個線程在進行,所以根據邏輯,生產者在內存滿的時候進行等待,並喚醒消費者隊列,反過來消費者在飢餓狀態下,等待並喚醒生產者生產。
寫出觀察者模式的代碼
爲了幫助開發者瞭解,這裏的觀察者代碼用了中文“新聞接受者”,被觀察者用了“新聞發佈者”,實際上在項目中是不能使用中文定義類名的。
從上邊的例子可以看出,定義了四個訂閱者,一個發佈者,當發佈者更新一個消息時,四個訂閱者都收到消息,根據發佈者更新的信息執行對應的更新操作。