单例模式代码⽰例
饿汉式单例
public class Singleton {
private static final Singleton singleton =new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return singleton;
}
}
懒汉式单例
public class Singleton {
private static Singleton singleton = null;
private Singleton(){
}
public synchronized static Singleton getSingleton(){
if(singleton == null){
singleton =new Singleton();
}
return singleton;
}
}
双重检查加锁
public class Singleton {
private volatile static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance =new Singleton();
}单例模式的几种实现方式
}
}
return instance;
}
}
单例模式优点
由于单例模式在内存中只有⼀个实例,减少了内存开⽀,特别是⼀个对象需要频繁地创建、销毁时,⽽且创建或销毁时性能⼜⽆法优化,单例模式的优势就⾮常明显。
由于单例模式只⽣成⼀个实例,所以减少了系统的性能开销,当⼀个对象的产⽣需要⽐较多的资源时,可以通过在应⽤启动时直接产⽣⼀个单例对象,然后⽤永久驻留内存的⽅式来解决。
单例模式可以避免对资源的多重占⽤,例如⼀个写⽂件动作,由于只有⼀个实例存在在内存中,避免对同⼀个资源⽂件的同时写操作。
单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计⼀个单例类,负责所有数据表的映射处理。
单例模式缺点
单例模式⼀般没有接⼝,扩展很困难,若要扩展,除了修改代码基本上没有第⼆种途径可以实现。
单例模式对测试是不利的。在并⾏开发环境中,如果单例模式没有完成,是不能进⾏测试的,没有接⼝也不能使⽤mock的⽅式虚拟⼀个对象。
单例模式与单⼀职责原则? 冲突。⼀个类应该只实现⼀个逻辑,⽽不关⼼它是否是单例的,是不是要单例取决于环境,单例模式
把“要单例”和业务逻辑融合在⼀个类中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论