程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java設計形式之單例形式進修

java設計形式之單例形式進修

編輯:關於JAVA

java設計形式之單例形式進修。本站提示廣大學習愛好者:(java設計形式之單例形式進修)文章只能為提供參考,不一定能成為您想要的結果。以下是java設計形式之單例形式進修正文


1 概述

單例形式有幾個利益:

(1)某些類創立比擬頻仍,關於一些年夜型的對象,這是一筆很年夜的體系開支。

(2)省去了new操作符,下降了體系內存的應用頻率,加重GC壓力。

(3)有些類如生意業務所的焦點生意業務引擎,掌握著生意業務流程,假如該類可以創立多個的話,體系完整亂了。

2 詳解

單例形式經常使用的寫法有以下這麼兩種。

2.1 餓漢式

假如運用法式老是創立並應用單例形式,或許在創立和運轉時壓力不是很年夜的情形下,可使用一個公有靜態變量,提早把對象創立好。


package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton1 {
    private static Singleton1 uniqueInstance = new Singleton1();

    private Singleton1(){

    }

    public static Singleton1 getInstance(){
        return uniqueInstance;
    }
}

如許做的話,當JVM加載這個類的時刻,依據初始化的次序,就曾經把對象創立好了。同時,JVM可以包管任何線程在拜訪這個單例對象之前,必定先創立此實例,而且只創立一次。

固然,也能夠應用一個靜態外部類來完成異樣的功效。


package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton2 { 

    private Singleton2() { 
    } 

    /**
     * 此處應用一個外部類來保護單例
     * */ 
    private static class SingletonFactory { 
        private static Singleton2 instance = new Singleton2(); 
    } 

    public static Singleton2 getInstance() { 
        return SingletonFactory.instance; 
    } 

    /**
     * 假如該對象被用於序列化,可以包管對象在序列化前後堅持分歧
     * */ 
    public Object readResolve() { 
        return getInstance(); 
    } 
}

2.2 兩重鎖方法
 “兩重鎖”,望文生義就是兩把鎖,第一把鎖用來檢討要創立的實例對象能否曾經創立了,假如還沒有創立才應用第二把鎖來停止同步。


package org.scott.singleton;
/**
 * @author Scott
 * @version 2013-11-16
 * @description
 */
public class Singleton3 {
    private volatile static Singleton3 uniqueInstance;

    private Singleton3(){

    }

    public static Singleton3 getInstance(){
        if(uniqueInstance == null){
            synchronized(Singleton3.class){
                if(uniqueInstance == null){
                    uniqueInstance = new Singleton3();
                }
            }
        }
        return uniqueInstance;
    }
}

假如對機能請求比擬高的話,這類方法可以年夜年夜削減創立的時光,今朝來講,這類方法也是比擬通用的一種創立單例的方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved