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

单例模式的概念:

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

使用场景:

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("就是吃");
    }
}

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

aikongmeng CSDN认证博客专家 RxJava 性能优化 Android Jetpack
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/ \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
( T | o ) ( Y | o | u | t | h | , | T | o ) ( S | i | m | p | l | e | ! )
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页