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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

写一个单例模式示例

發布時間:2024/3/24 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 写一个单例模式示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

*寫一個單例模式示例

*要點
*1.某個類只能有一個實例

  • 構造器私有化

*2.它必須自行創建這個實例

  • 含有一個該類的靜態變量來保存這個唯一的實例

*3.它必須自行向整個系統提供這個實例

  • 對外提供獲取該實例的方式:1.直接暴露2.用靜態變量的get方法獲取

*幾種常見形式
*餓漢式:
在類初始化時直接創建對象,不管是否需要這個對象都會創建,
不存在線程安全問題

  • 直接實例化餓漢式(簡潔直觀)public static final SingletonDemo INSTANSE=new SingletonDemo();private SingletonDemo() {}
  • 枚舉式(最簡潔)枚舉類型:標識該實例的對象是有限幾個,我們可以定為一個,就成了單例public enum Singleton2{INSTANCE}
  • 靜態代碼塊餓漢式(適合復雜實例化)public static final SingletonDemo INSTANCE;static {INSTANCE=new SingletonDemo();}private SingletonDemo() { }

*懶漢式:
延遲創建對象

  • 線程不安全(適用與單線程)
  • 線程安全(適用于多線程)
  • 靜態內部類形式(適用于多線程)

懶漢式示例

/** 懶漢式:* 1)構造器私有化* 2)用一個靜態變量保存這個唯一的實例* 3)提供一個靜態方法,獲取這個實例對象*/class SingletonDemo {/** 線程不安全(適用與單線程)* private static SingletonDemo INSTANCE;private SingletonDemo(){ }public static SingletonDemo getINSTANCE() {if(INSTANCE==null) {INSTANCE=new SingletonDemo();}return INSTANCE;}*//*** // 線程安全(適用于多線程)private static SingletonDemo INSTANCE;private SingletonDemo(){ }public static SingletonDemo getINSTANCE() {if(INSTANCE==null) {synchronized (SingletonDemo.class) {if (INSTANCE == null) {INSTANCE = new SingletonDemo();}}}return INSTANCE;} *//** 靜態內部類形式(適用于多線程)* 在內部類被加載和初始化時,才創INSTANCE對象* 靜態內部類不會自動隨著外部類的加載和初始化而初始化,它是要單獨加載和初始化的* 因為是在內部類加載和初始化時創建的,因此線程是安全的*/private SingletonDemo() {}private static class Inner{private static final SingletonDemo INSTANCE=new SingletonDemo();}public static SingletonDemo getInstance() {return Inner.INSTANCE;} }public class SingletonTest{public static void main(String[] args) {SingletonDemo s1=SingletonDemo.getInstance();SingletonDemo s2=SingletonDemo.getInstance();System.out.println(s1==s2);System.out.println(s1);System.out.println(s2);} }

static的作用:

1.修飾成員變量給變量加上static關鍵字后,變量變為全局變量*JVM在加載時會將此變量加載到方法區而不是堆里 2.修飾成員方法可以使用 類名.方法名 操作方法 不需要在new出對象 3.靜態代碼塊當new出一個對象后,static修飾的成員變量首先被初始化隨后是普通成員,最后是構造方法,*在程序運行的過程中,static只會在第一次new時被初始化 4.靜態導包 5.代碼塊靜態塊最先執行,其次時普通代碼塊,再是構造方法

final的用法:

1.用在類上表示該類不可以被繼承 2.用在方法上表示該方法不可以被重寫(override) 3.用在變量上表示 該變量一旦被賦值 值不能被改變

static修飾的屬性強調它們只有一個,final修飾的屬性表明
是一個常數(創建后不能被修改)。static final修飾的屬性
表示一旦給值,就不可修改,并且可以通過類名訪問。

總結

以上是生活随笔為你收集整理的写一个单例模式示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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