日韩性视频-久久久蜜桃-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设计模式——单件模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产又爽又黄的激情精品视频 | 亚洲一区二区精品在线 | 奇米狠狠去啦 | 日韩不卡在线播放 | 国产一级视频免费观看 | 国产绿帽刺激高潮对白 | 精品国产乱码久久久久久蜜柚 | 欧美国产在线观看 | 国产欧美一区二区视频 | 91亚洲专区 | 国产网站精品 | 亚洲成年网 | 国产精品伦一区 | 亚洲AV无码乱码国产精品牛牛 | 97超碰免费| 麻豆网站| 亚洲三级网 | 成人午夜在线视频 | 玩弄人妻少妇500系列 | 一集毛片 | 国产清纯白嫩初高中在线观看性色 | 国产毛片久久久久久国产毛片 | 日韩激情网 | 玖玖伊人| 青青操在线| 国产国产乱老熟女视频网站97 | 免费毛片播放 | 深夜视频在线 | 免费中文字幕视频 | 午夜网站在线观看 | 经典毛片 | 免费在线观看黄网站 | 亚洲成人黄色av | 未满十八岁禁止进入 | 久久精品8| 久久久久久久久久久久Av | 午夜激情四射 | 香港三级日本三级三69 | www.四虎.| 国久久久 | 国产欧美一区二区三区另类精品 | 草莓视频在线观看18 | 国产黄色www | 中文有码视频 | 久久深夜视频 | 豆花视频在线 | 欧美综合一区二区三区 | 黑人超碰 | 蜜臀久久99精品久久久久久 | 黄毛片在线观看 | 精品人妻一区二区三区香蕉 | 中文字幕网伦射乱中文 | 日韩精品综合 | 亚洲中国色老太 | 美女裸体跪姿扒开屁股无内裤 | 一级特黄免费视频 | 午夜在线一区二区 | 91们嫩草伦理 | 毛片视 | 在线观看69 | 人善交videos欧美3d动漫 | 一级免费观看 | 香蕉茄子视频 | 曰本女人与公拘交酡 | 操白虎逼| 91成人免费观看 | 国产真实乱人偷精品人妻 | 国产热99 | 国产极品美女在线 | 在线观看特色大片免费网站 | 午夜精品在线视频 | 亚洲特黄毛片 | 99热8| 魔女鞋交玉足榨精调教 | 婷婷久久伊人 | 久久无码人妻精品一区二区三区 | 四虎久久 | 亚洲插 | 久久精品国产亚洲av久一一区 | 人妖一区二区三区 | 五十路中文字幕 | 激情超碰 | 亚色av | 国产精品美女久久久久av爽 | 亚洲天堂av一区 | 精品国产99久久久久久 | 午夜三级视频 | 日韩卡一卡二 | 免费观看视频在线观看 | 四虎视频在线观看 | 超碰人人人人人人 | 在线中文字幕视频 | 日本乱码一区二区 | 日本少妇性高潮 | 51成人做爰www免费看网站 | 久久高清免费视频 | 欧美日韩一区二区在线观看 | 6080午夜伦理 | 亚洲第一视频区 |