欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式-单例模式

程序员文章站 2024-02-22 12:55:10
...
这里写代码片

单例模式(饿汉,懒汉)

package singleton;

/**
* 单例模式
* 2018年8月28日 11:20:57
* @author fjf
* 参考: https://www.cnblogs.com/Ycheng/p/7169381.html
*/

public class Test {
    public static void main(String[] args) {

        System.out.println(new User());
        System.out.println(new User());

        System.out.println(User1.getInstance());
        System.out.println(User1.getInstance());

        System.out.println(User2.getInstance());
        System.out.println(User2.getInstance());

    }
}

// 1.正常的user类定义

class User {

    // 默认为无参的构造函数
    /*
     * public User() { super(); }
     */
}

/**
* 单例模式
*
* @author fjf 饿汉式的 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
*/

class User1 {

    private static User1 u1 = new User1();

    // 构造函数 私有化
    private User1() {
        super();
    }

    // 对外提供 类名.方法(User1.getInstance())来获取实例
    public static User1 getInstance() {
        return u1;
    }

}

/**
* 饿汉式的 变种
*
* @author fjf
*
*/

class User2 {
    private static User2 u2;

    static {
        u2 = new User2();
    }

    // 构造函数 私有化
    private User2() {
        super();
    }

    // 对外提供 类名.方法(User2.getInstance())来获取实例
    public static User2 getInstance() {
        return u2;
    }
}

/**
* 懒汉式 在类加载时不初始化。 使用的时候在加载 线程不安全
*/

class User3 {
    private static User3 u3;

    // 构造函数 私有化
    private User3() {
        super();
    }

    // 对外提供 类名.方法(User3.getInstance())来获取实例
    public static User3 getInstance() {
        if (null != u3) {
            u3 = new User3();
        }
        return u3;
    }
}

/**
* 懒汉式 在类加载时不初始化。 使用的时候在加载 线程 安全 加了锁后 效率低点
*/

class User4 {
    private static User4 u4;

    // 构造函数 私有化
    private User4() {
        super();
    }

    // 对外提供 类名.方法(User3.getInstance())来获取实例
    public static synchronized User4 getInstance() {
        if (null != u4) {
            u4 = new User4();
        }
        return u4;
    }
}

设计模式-单例模式

相关标签: 单例模式