首頁  >  文章  >  後端開發  >  Java與Python中單例模式的區別

Java與Python中單例模式的區別

零到壹度
零到壹度原創
2018-04-19 16:14:351498瀏覽

本文實例講述了Java與Python中單例模式的差異。分享給大家供大家參考,如下:

單例模式

#        單例模式,是常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類別。透過單例模式可以保證系統中一個類別只有一個實例。即一個類別只有一個物件實例。

一、Java中的單例模式

/**
 * 单例模式 
 * 懒汉式 
 *  1)、构造器私有化 
 *  2)、声明私有的静态属性 
 *  3)、对外提供访问属性的静态方法,确保该对象存在
 */
public class SingleCase {

	private static SingleCase sc = null;

	private SingleCase() {
	}

	public static SingleCase getSingleCase() {

		if (sc == null) {
			return new SingleCase();
		}

		return sc;

	}
}

/**
 * 单利模式 
 * 饿汉式
 *  1)、构造器私有化
 *  2)、声明私有的静态属性,同时创建该对象 
 *  3)、对外提供访问属性的静态方法
 * 
 */
class SingleCase01 {
	private static SingleCase01 sc = new SingleCase01();

	private SingleCase01() {
	}

	public static SingleCase01 getSingleCase() {
		return sc;
	}
}
/**	
*	饿汉式
*
*	类在使用的时候加载 ,延缓加载时间
*/
class SingleCase02 {
	
	private static class innerclass{  //内部类
		private static SingleCase02 sc = new SingleCase02();
	}
	
	private SingleCase02() {}

	public static SingleCase02 getSingleCase() {
		return innerclass.sc;
	}
}

二、Python中的單例模式

        ps:由於python學過的時間有點長,一直也沒時間複習,如果有錯誤希望廣大讀者指出來。

        建構單例模式

class Test(object):
    __instance = None
    __firstinit = 1

    def __new__(cls, *args, **kwargs):
        if Test.__instance == None:
            Test.__instance = object.__new__(cls, *args, **kwargs)
        return Test.__instance

    def __init__(self):
        if not Test.__firstinit:
            return
        Test.__firstinit = 0

if __name__ == "__main__":
    a = Test()
    b = Test()
    print a
    print b

        上例中我們將類別的實例儲存到一個類別屬性__instance 中,一旦類別屬性不為None,我們就不再呼叫_ _new__,而是直接回傳 __instance。另外為避免每次呼叫 Test() 都會執行一遍實例初始化,我們引入了一個 __firstinit 的類別屬性,執行結果:

<__main__.Test object at 0x000002507FF6E1D0>
<__main__.Test object at 0x000002507FF6E1D0>

        值相同,即可證明為相同物件。


相關推薦:

單例模式的6種實作方式

單例模式與多例模式的總結

##單例模式解析

java單例模式#

以上是Java與Python中單例模式的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn