日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式——单件模式

發布時間:2025/3/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式——单件模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

? 有一些對象其實我們只需要一個,比方說:線程池(threadpool)、緩存(cache)、對話框、處理偏好設置和注冊表(registry)的對象、日志對象,充當打印機、顯卡等設備的驅動程序的對象。事實上,這類對象只能有一個實例,如果制造出多個對象,就會導致許多的問題產生,例如:程序的行為異常、資源使用過量,或者是不一致的結果。——《Head First設計模式》


使用環境

? 當我們的對象在邏輯上只能有一個的時候,比如說打印機。想像一下,如果我們有兩個指向同一臺打印機的對象,這時我們應該去響應哪個對象的請求呢?顯然我們只能有一個打印機的對象,且這個對象還要互斥地去訪問,否則上述問題依舊存在。


優點介紹

?1.可以在需要時才開始創建對象

?2.保證只有一對象被創建


思路分析

單件模式有兩個精髓:

?1.一個私有的構造器

?2.一個靜態的成員變量,用于保存類的對象


? 如果你沒有一個私有的構造器,那么我們完全可以不使用公開的getInstance()方法,而是直接使用類的構造器來實現;如果你沒有第一個靜態的成員變量來保存對象的對象,你就無法去保證此對象一直存在,這樣系統就會在適當的時候回收此對象。


因為上面兩點的約束,我們可以得到一個類似這樣的公開化的方法:

private static SingletonClass mSingletonClass = null;private SingletonClass() {}public static synchronized SingletonClass getInstance() {if (mSingletonClass == null) {mSingletonClass = new SingletonClass();}return mSingletonClass;}

上面的代碼中使用了關鍵字synchronized.這是為了在多線程中去互斥地訪問臨界資源而添加的。

但是你必須知道,同步一個方法可能造成程序執行效率下降100倍。所以在你的程序中,如果 getInstance()?頻繁使用,那么就可能需要重新設計你的代碼以提高效率了。


雙重檢查加鎖

? 上面說到 getInstance() 在多線程中的使用可能會有一些不盡如人意的地方。那么要怎么來作一個修改,使得程序更完善呢?利用雙重檢查加鎖可以達到我們的目的。首先檢查是否實例已經創建了,如果尚未創建,進行同步。這樣的處理,使得程序只會在第一次發生同步,這正是合乎要求的。實現如下:

public static SingletonDoubleChecked getInstance() {if (mDoubleChecked == null) {synchronized (SingletonDoubleChecked.class) {if (mDoubleChecked == null) {mDoubleChecked = new SingletonDoubleChecked();}}}return mDoubleChecked;}
注意:雙重檢查加鎖不適用于1.4之前的版本。


類圖展示



代碼展示

SingletonClass.java

public class SingletonClass {private static SingletonClass mSingletonClass = null;private SingletonClass() {}public static synchronized SingletonClass getInstance() {if (mSingletonClass == null) {mSingletonClass = new SingletonClass();}return mSingletonClass;}public void printLabel() {System.out.println("Singleton Class Label.");} }
SingletonDoubleChecked.java

public class SingletonDoubleChecked {private volatile static SingletonDoubleChecked mDoubleChecked = null;private SingletonDoubleChecked() {}public static SingletonDoubleChecked getInstance() {if (mDoubleChecked == null) {synchronized (SingletonDoubleChecked.class) {if (mDoubleChecked == null) {mDoubleChecked = new SingletonDoubleChecked();}}}return mDoubleChecked;}public void printLabel() {System.out.println("SingletonDoubleChecked Class Label.");} }
TestMain.java

public class TestMain {public static void main(String[] args) {SingletonClass singletonClass = SingletonClass.getInstance();singletonClass.printLabel();SingletonDoubleChecked doubleChecked = SingletonDoubleChecked.getInstance();doubleChecked.printLabel();} }

效果圖



Github 源碼下載

https://github.com/William-Hai/DesignPatternCollections

總結

以上是生活随笔為你收集整理的Java设计模式——单件模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。