iPhone12要來了,蘋果第一款5G手機,哪些值得期待?
設計模式的介紹
1.設計模式代表了最佳的實踐,是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的
2.設計模式的本質提高了軟體的維護性,通用性和擴充套件性,並降低軟體的複雜度
3.一共有23中設計模式
4.設計模式並不侷限於某種語言,java,php,c++都有設計模式
設計模式型別
1.建立型模式:單例模式,抽象工廠模式,原型模式,建造者模式,工廠模式
2.結構型模式:介面卡模式,橋接模式,裝飾模式,組合模式,外觀模式,享元模式,代理模式
3.行為型模式:模板方法模式,命令模式,訪問者模式,迭代器模式,觀察者模式,中介者模式,備忘錄模式,直譯器模式,狀態模式,策略模式,職責鏈模式
單列模式
單例模式八種方法:
1)餓漢式(靜態常量)
2)餓漢式(靜態程式碼塊)
3)懶漢式(執行緒不安全)
4)懶漢式(執行緒安全,同步方法)
5)懶漢式(執行緒安全,同步程式碼塊)
6)雙重檢查
7)靜態內部類
8)列舉
餓漢式(靜態常量)應用例項
步驟如下:
1)構造器私有化(防止new)
2)類的內部建立物件
3)向外暴露一個靜態的公共方法。getInstance
4)程式碼實現
優缺點說明:
1)優點:這種寫法比較簡單,就是在類載入的時候完成例項化,避免了執行緒同步問題(解決了多執行緒問題)
餓漢式(靜態程式碼塊)應用例項
步驟如下
1)構造器私有化
2)建立本類的例項變數
3)放在靜態程式碼塊裡
4)提供一個公共的靜態方法,返回例項物件
5)程式碼實現
優缺點說明:
1)這種方法與前面靜態常量方法類似,只不過將例項物件放在靜態程式碼塊中,在類載入的時候,就例項該物件
2)可能造成資源浪費
懶漢式(第一種執行緒不安全)
步驟如下(提供一個靜態的公有方法,當使用到該方法時,才會去建立instance)
1)宣告一個靜態的本類物件
2)構造器私有化,防止外部new
4)程式碼實現
![在這裡插入圖片描述](https://img.796t.com/res/2020/10-10/08/a299cd1176f60d65fd63d2c9721618ac.png)
優缺點說明:
優點:起到了懶載入的作用,但是這種情況只能在單執行緒下使用
缺點:如果在多執行緒的情況,一個執行緒進入了判斷語句模組,還未來得及往下執行,另一個執行緒也通過這個判斷語句,會產生多個例項,導致執行緒不安全,所以在多執行緒的情況下最好不使用這種方式
懶漢式(執行緒安全)
優缺點說明:
優點:解決了執行緒不安全的問題
缺點:方法同步導致效率太低了
懶漢式(執行緒安全,同步程式碼塊)
優缺點說明:
缺點:執行緒不安全,在實際開發中不能使用
雙重檢查DCL+volatile模式(解決執行緒安全問題,同時解決懶載入問題)
程式碼實現
優缺點說明:
優點:
1)進行了倆次if(singletonnull)檢查,這樣保證了執行緒安全
2)例項化程式碼只會執行一次,後面再次訪問時,判斷if(singletonnull)直接return例項化物件,也避免的反覆方法同步
3)執行緒安全,延遲載入,效率高
4)推薦使用
靜態內部類
操作步驟:
1)構造器私有化,防止外部new
2)寫一個靜態的內部類方法
3)呼叫靜態內部類方法
4)程式碼實現
優缺點說明:
1)這種方式採用了類載入的機制保證初始化例項時只有一個執行緒
2)靜態內部類在Singleton類在被載入時不會立即例項化,而是在需要例項化時,呼叫getInstance方法,才會裝載SingletonInstance類,從而完成Singleton的例項化
3)JVM保證了執行緒的安全性
4)優點:避免了執行緒不安全,利用靜態內部類特點實現延遲載入,效率高
列舉
程式碼實現
優缺點說明:
1)藉助JDK1.5中列舉來實現單例模式,不僅能避免多執行緒同步的問題,而且還能防止反序列化重新建立新的物件
2)推薦使用