为什么要使用单例

什么是单例:

一个类在整个系统中只有一个实例,而且这个实例在类的内部由private构造的,外部不能直接调用其构造方法,只能获取它的实例.

单例模式的优点:

在内存中只有一个实例对象,节省内存空间.避免重复的创建和销毁对象,可以提高性能,避免对多重资源的重复占用,可以全局进行访问.

单例模式的使用场景:

需要频繁的实例化和销毁的对象.有状态的工具类对象,频繁访问数据库或文件对象.

eg:(静态内部类)

public class SingleInstance{

    private static class InstanceHolder{

           public static final SingleInstance instance=new SingleInstance();

     }

     public static SingleInstance getInstance(){

            return InstanceHolder.instance;

   }

}


eg:(懒汉单列模式)

//懒汉单例模式,在第一次调用时候实例化自己

public class Singleton {

private Singleton() {

}

private static Singleton single = null;

// 静态工厂方法

public static Singleton getInstance() {

if (single == null) {

single = new Singleton();

}

return single;

}

}

加同步锁可以变线程安全的单例

public static synchronized Singleton getInstance(){

if (single == null) {

single = new Singleton();

}

return single;

}

eg:饿汉单例模式

//饿汉式单例类.在类初始化时,已经自行实例化

public class Singleton1 {

private Singleton1() {}

private static final Singleton1 single = new Singleton1();

//静态工厂方法

public static Singleton1 getInstance() {

return single;

}

}

饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。



外部获取instance实例,而不是new一个对象.

Sgingleton  obj=Singleton.getInstance();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容