您的位置:首页 > 编程语言 > Java开发

java单例模式的详细介绍

2008-11-18 11:05 316 查看
Ø 单例类(singleton)可以保证系统中只可能由该类的一个对象,而且这个对象由类自行初始化。

Ø 单例类一般可以用来抽象系统中一些共享的资源。

Ø 单例类有如下特点:

§ 单例类只有一个实例。

§ 单例类自行创建并提供这个唯一的实例。

Ø 资源管理器一般做成单例模式。譬如每台计算机可以有若干个打印机,但只能有 一个Printer Spooler,以避免两个打印作业同时输出到打印机中。

Ø 单例模式有以下的特点:

§ 单例类只能有一个实例。

§ 单例类必须自己创建自己的惟一的实例。

§ 单例类必须给所有其他对象提供这一实例。

Ø 饿汉式单例类

Private static final EagerSingleton m_instance=new EagerSingleton();

Private EagerSingleton(){}

Public static EagerSingleton getInstance()

{

Return m_instance;

}

l 在这个类被加载时,静态变量

m_Instance会被初始化,此时

类的私有构造器会被调用。这

时候,单例类的惟一实例就被

创建出来了。

l Java语言中单例类的—个最重

要的特点是类的构造于是私有

的,从而避免外界利用构造子

直接创建出任意多的实例。

l 值得指出的是,由于构造于是

私有的,因此此类不能被继承。

Ø 懒汉式单例类

Public class LazySingleton

{

Private Static LazySingleton

m_instance=null;

}

Private LazySingleton(){}

Synchronized public static LazySingleton

getInstance()

{

If(m_instance==null)

{

m_instance=new LazySingleton();

}

Return m_instance;

}

l 静态工场方法使用了同步化,

以处理多线程环境。

l 单从资源利用效率角度来讲,

这个比懒汉式单例类稍差些

l 从速度和反应时间角度来讲,

则比懒汉式单例类稍好。

l 然而,懒汉式单例类在实例

化时,必须处理好在多个线程

同时首 次引用此类时的访问

限制问题,特别是当单例类作

为资源控制器在实例化时必然

涉及资源初始化.而资源初始

化很有可能耗费时问。这意味

着出现多线程同时首次引用此

类的几率变得较大。

具体的一个例子:

class Singleton{

private static Singleton onlyone =

new Singleton();

private int value;

public static Singleton getSingle() {

return onlyone;

}

private Singleton() {}

public int getValue(){

return value;

}

public void setValue(int value){

this.value = value;

}

}

class Singleton{

private static Singleton onlyone = null;

private int value;

public static Singleton getSingle() {

if(onlyone==null){

onlyone = new Singleton();

}

return onlyone;

}

private Singleton() {}

public int getValue(){

return value;

}

public void setValue(int value){

this.value = value;

}

}

public class Test {

public static void main(String args[]){

Singleton s1 = Singleton.getSingle();

Singleton s2 = Singleton.getSingle();

System.out.println(s1.equals(s2));

System.out.println(s1 == s2);

s1.setValue(100);

s2.setValue(200);

System.out.println(s1.getValue());

}

}

在什么情况使用单例模式

使用单例模式有 一个必要条件:在一个系统要求 一个类只有—个实例时才应当使用单例模式。反过来说,如果一个类可以有几个实例共存.那么就没有必要使用单例类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: