介绍
这种类型的设计模式属于创建型模式。
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
适用场景:当您想控制实例数目,节省系统资源的时候。
例如:要求生产唯一序列号。
实现
注意事项:getInstance() 方法中需要使用同步锁 synchronized (Singleton.class) 防止多线程同时进入造成 instance 被多次实例化。
图解
饿汉模式(非线程安全的)
class Sington{
private Sington(){}
private static Sington instance = new Sington();
public static Sington getInstance(){
return instance;
}
}
懒汉模式(非线程安全的)
class Sington{
private Sington(){}
private static Sington instance;
public static Sington getInstance(){
if(instance == null){
instance = new Sington();
}
return sington;
}
}
总结
优点
1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
2、避免对资源的多重占用。
缺点
没有接口,不能继承,与单一职责原则冲突(一个类应该只关心内部逻辑,而不关心外面怎么样来实例化)。