《设计模式之禅》-2.单例设计模式

单例设计模式

定义

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

通用代码

public class Singleton{

    private static Singleton singleton = new Singleton();

    //私有化构造函数,不能从外部生成

    private Singleton(){

    }

    public static Singleton getSingleton(){

        return singleton;

    }

}

单例模式优点

1.由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建,销毁时,而且创建或销毁时性能无法优化,单例模式的优势就非常明显了

2.单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,比如读取配置,产生其他依赖对象时,则可以通过在应用中启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决

3.单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在在内存中,避免对同一个资源文件的同时写访问操作

4.单例模式可以在系统设置全局的访问点,优化和共享资源访问

场景

1.要求生产唯一的序列码

2.需要共享访问点和共享数据时,比如计数器

3.创建一个对象需要消耗的资源过多,如要访问IO和数据库

4.需要定义大量的静态常量和静态方法时的环境(我们一般直接定义为static)

单例模式有两种实现模式

分为饿汉式和懒汉式

懒汉式 是在调用时再产生单例对象 例

public class Singleton{

    private static Singleton singleton = null;

    //私有化构造函数,不能从外部生成

    private Singleton(){}

    public static Singleton getSingleton(){

        if(singleton == null){

            singleton = new Singleton();

        }

        return singleton;
    }

}

但是懒汉式会节省资源,但是会出现线程不安全的情况,可以使用synchronized关键字解决

饿汉式,则是在类初始化时就已经产生单例对象了

public class Singleton{

    private static Singleton singleton = new Singleton();

    //私有化构造函数,不能从外部生成

    private Singleton(){}

    public static Singleton getSingleton(){

        return singleton;

    }

}

猜你喜欢

转载自blog.csdn.net/Minstrel007/article/details/83066411