设计模式,是被反复使用,多数人知道,并经过分类的代码设计经验的总结。目的自然是代码的重用,理解,可靠等。
所谓单例模式,就是有些对象只需要一个,比如,配置文件,工具类,线程池,缓存,日志对象等等,在应用程序中某个实例有且只有一个。一般分为“懒汉模式”和”饿汉模式”。
饿汉模式:加载类时慢,运行时获取对象快,线程安全的。
懒汉模式:加载类时快,运行时获取对象慢,线程不安全。
看下面代码饿汉模式.
/**
* 单例模式 :有些对象只需要一个 保证程序中某个实例有且只有一个 分为:饿汉模式,懒汉模式
*
* @author
*
*/
public class SingleTon {
// 修改默认私有构造
// 目的:不允许外部直接创建对象
private SingleTon() {
}
// 创建类的唯一实例,并且设为静态
// 类加载时,这个实例就加载,不管其他,形象成为“饿汉”
static SingleTon single = new SingleTon();
}
这样就可以调用测试了:
SingleTon s1=SingleTon.single;
SingleTon s2=SingleTon.single;;
System.out.println(s1==s2);
有时候,会把实例变成是有的,这时就需要添加一个共有的静态方法了。
// 创建类的唯一实例,并且设为静态
// 类加载时,这个实例就加载,不管其他,形象成为“饿汉”
private static SingleTon single = new SingleTon();
// 若上面的静态实例变为私有,需要提供一个公开方法获取实例方法
public static SingleTon getSingle() {
return single;
}
这里说一下懒汉模式:
package cn.singleton;
/**
* @author
*懒汉模式
*第一步,构造方式私有化,不允许之间创建对象
*第二步,声明类的唯一实例,使用private static修饰
*第三步,提供一个用于获取实例的方法,使用public static修饰
*/
public class SingleTon2 {
private SingleTon2(){
}
private static SingleTon2 single;
public static SingleTon2 getSingle(){
if (single==null) {
single=new SingleTon2();
}
return single;
}
}
测试:
SingleTon2 s1=SingleTon2.getSingle();
SingleTon2 s2=SingleTon2.getSingle();
System.out.println(s1==s2);
一天至少一个Java知识点。到这里了。为自己加油!