目的:
使得类的一个对象成为该类系统中的唯一实例
定义:
一个类有且仅有一个实例,并且自行实例化向整个系统提供
实现:
1,只提供私有的构造方法
2,含有一个该类的静态私有对象
3,提供一个静态的共有的方法用于创建和获取私有对象
优点:
1.在内存中只有一个对象,节省内存空间
2.避免频繁的创建销毁对象,提高性能
3.避免对共享资源的多重占用
缺点:
1.扩展比较困难
2.如果实例化后的对象长期不利用,系统将会默认认为垃圾进行回收,造成对象状态丢失
使用场景:
1.创建对象占用资源过多,但同时又需要用到该类对象
2.对系统内资源要求统一读写,如读写配置信息
3.当多个实例存在可能引起程序逻辑错误,如号码生成器
//饿汉式:创建对象实例的时候直接初始化 空间换时间
public class SingletonOne{
//1.创建类中的私有构造
private SingletonOne(){
}
//2.创建该类型的私有静态实例
private static SingletonOne instance=new SingletonOne();
//3.创建公有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
}
//懒汉式:类内实例对象创建时并不初始化,直到第一次调用get方法时,才完成初始化操作----存在线程风险
public class SinglentonTwo {
//1.创建私有构造方法
private SinglentonTwo() {
}
//2.创建静态的该类实例对象
private static SinglentonTwo instance=null;
//3.创建开放的静态方法提供实例对象
public static SinglentonTwo getInstance() {
if(instance==null)
instance = new SinglentonTwo();
return instance;
}
}