单例模式
- 要点:
- 某个类只能由一个实例
- 必须自行创建实例
- 必须自行向整个系统提供这个实例
- 实现:
- 只提供私有的构造方法
- 含有一个该类的静态私有对象
- 提供一个静态的公有方法用于创建、获取静态私有对象
- 代码实现方案:
public class SingletonOne {
/**
* 饿汉式:创建对象实例的时候直接初始化 空间换时间的操作形式
*/
//1、创建类中私有构造
private SingletonOne(){
}
//2、创建该类型的私有静态实例
private static SingletonOne instance=new SingletonOne();
//3、创建共有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
}
代码语言:javascript复制public class Test {
public static void main(String[] args) {
/*通过类名.对象的方式*/
SingletonOne one=SingletonOne.getInstance();
SingletonOne two=SingletonOne.getInstance();
System.out.println(one "n" two);
}
}
结果:
代码语言:javascript复制public class SingletonTwo {
/**
* 懒汉式: 类内实例对象创建时并不直接初始化,直到第一次调用get方法时,才完成初始化操作
*/
/*1、创建该类型的私有静态实例*/
private SingletonTwo(){
}
/*2、创建该类型的私有静态实例对象*/
private static SingletonTwo instance=null;
/*3、创建静态开放的方法提供实例对象*/
public static SingletonTwo getInstance(){
if (instance==null)
instance=new SingletonTwo();
return instance;
}
}
代码语言:javascript复制public class Test {
public static void main(String[] args) {
SingletonTwo three=SingletonTwo.getInstance();
SingletonTwo four=SingletonTwo.getInstance();
System.out.println(three "n" four);
}
}
结果:
使用场景
- 创建对象时占用资源多,但同时又需要用到该类对象
- 对系统内资源要求统一读写,如读写配置信息
- 当多个实例存在可能引起程序逻辑错误,如号码生成器