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

单例模式

2017-02-05 21:40 225 查看

单例模式:

保证整个应用中某个实例有且只有一个。
举例:
配置文件、工具类、线程池、缓存、日志对象等
常用的单例模式有两种:

1.饿汉模式

2.懒汉模式

 

一.饿汉模式

步骤:

1.构造方法私有化.

(被private修饰的变量与方法只能在本类使用,因此外界无法通过构造方法直接创建对象,只能通过类名调用该类的public静态成员与方法.)

2.本类中直接创建一个类的唯一实例,并且是一个私有静态的实例.

3.创建一个公共的静态方法来返回该实例,外界可以直接通过类名调用该方法获取得到实例对象.

因为该唯一的实例是在该类被加载时就会去创建,(要早些时候吃饱)因此称为饿汉模式.

Singleton.java

package com.imooc;
/** * @author  丁兆元
* @date 创建时间:2017年2月5日 下午8:26:35
* @version版本标识 1.0
* @parameter 参数及其意义
* @since  最早使用该方法/类/接口的JDK版本
* @return 返回值
*/
public class Singleton
{
//1.将构造方法私有化,不允许直接创造对象
private Singleton()
{

}

//2.创建类的唯一实例,使用private static 修饰
private static Singleton instance=new Singleton();

//3.提供一个用于获取实例的方法,使用public static 修饰
public static Singleton getInstance()
{
return instance;
}
}


二.懒汉模式

步骤:

1.构造方法私有化

2.声明一个类的引用但不实例化,依然使用private static修饰.

3.创建一个公共静态方法,方法中需要判断该实例是否为null,即是否被实例化过,如果为null则创建一个实例,最后都返回该声明的引用.

Singleton2.java

package com.imooc;
/** * @author  丁兆元
* @date 创建时间:2017年2月5日 下午9:08:35
* 懒汉模式
*/
public class Singleton2
{
//1.将构造方法私有化,不允许外边直接创造对象
private Singleton2()
{

}

//2.声明类的唯一实例,使用private static修饰
private static Singleton2 instance;

//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance()
{
if(instance==null)
instance=new Singleton2();
return instance;
}
}


饿汉模式与懒汉模式区别在于对象在什么时候被实例化.

饿汉模式:当类被加载时就会去实例化对象,不管是否使用该对象.

懒汉模式:当外部要使用该对象时才会去实例化该对象,即当外部第一次调用该方法时才会去实例化对象,以后再次调用时直接返回该实例后的对象.


Test.java

package com.imooc;
/** * @author  丁兆元
* @date 创建时间:2017年2月5日 下午8:28:01
* @version版本标识 1.0
* @parameter 参数及其意义
* @since  最早使用该方法/类/接口的JDK版本
* @return 返回值
*/
public class Test
{
public static void main(String[] args)
{
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2)
System.out.println("s1与s2是同一个实例。");
else
System.out.println("s1与s2不是同一个实例。");
}
}

s1与s2是同一个实例。
s3与s4是同一个实例。

饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。

懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息