Java基础 设计模式-单例模式

版权声明:本文为博主原创文章,可以随意自由转载传播,但请注明出处. https://blog.csdn.net/aikongmeng/article/details/88542971

单例模式的概念:

确保一个类只有一个实例,且自动实例化向外提供这个实例。

使用场景:

1.要求生唯一对象的场景

2.需求提供一个共享访问或者共享数据

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

4.需要定义大量的静态变量和静态方法的场景 ,如工具类

常见写法:

传说中的饿汉:

/**
 * 饿汉,
 * 线程安全,
 */
public class ESingleton {
    //初始化时生成实例
    private static ESingleton singleton = new ESingleton();
    //必须是私有
    private ESingleton(){

    }
    //对外提供实例的访问
    public static ESingleton getInstance(){
        return singleton;
    }

}

传说中的懒汉:

/**
 * 懒汉,
 * 线程不安全,不适用高并发场景,
 */
public class LSingleton {

    private static LSingleton singleton = null;
    private LSingleton(){

    }
    //使用实例时没有实例化过再初始化
    public static LSingleton getInstance(){
        if (singleton ==null){
            singleton = new LSingleton();
        }
        return singleton;
    }

}

解决 线程不安全问题,可以给 getInstance 方法加上 synchronized 关键字。 

变种写法:

public class Dog {

    private Dog() {
    }

    private static class DogHolder {
        private static final Dog dog = new Dog();

    }

    public static Dog getInstance() {
        return DogHolder.dog;
    }

    public static void bark() {
        System.out.println("汪汪汪 ");
    }
    public void eat() {
        System.out.println("就是吃");
    }
}

定义参考:《设计模式之禅

猜你喜欢

转载自blog.csdn.net/aikongmeng/article/details/88542971