java设计模式-单例模式

qq群:811317840 欢迎大家
关于设计模式的学习,现在刚开始,记录在册,互相交流,有什么不对的大家可以留言。
单例模式:通俗的理解为这个类只存在一个实例,常常扮演系统的全局对象,就像计算机只有一个任务管理器。那么我们在开发中有哪些使用了单例模式呢?如数据库连接池等。

单例模式区分饿汉式和懒汉式:
饿汉式:

public class SingletonHunger {
    //私有构造 使用private 限制这个类不能通过new获得
    private SingletonHunger () {
    }
    //私有,防止被引用,类加载的时候就会创建
    private static SingletonHunger instance = new SingletonHunger();
    //提供公共静态方法获取
    public static SingletonHunger getInstance() {
        System.out.println("饿汉");
        return instance;
    }
}

懒汉式:来自大话设计模式一书

public class Singleton {
//私有无参构造,防止被实例化
private Singleton() {
}
//私有静态实例,防止被引用,此处赋值为null,实现延迟加载
private static Singleton instance = null;
//程序运行时创建一个静态只读的进程辅助对象
private static final Object obj = new Object();
//静态方法,用于创建实例
public static Singleton getInstance () {
    System.out.println("懒汉");
    if (instance == null) {
        synchronized(obj) {//加锁 防止并发产生多个实例
            if (instance == null) {//此处必须要判断 也是为了防止并发时产生多个实例
                instance = new Singleton();
            }
        }
    }
    return instance;
}

}
自己基础不好,看了饿加载,我还是不太明白,

private static SingletonHunger instance = new SingletonHunger();

这一句代码是在什么时候执行的。不懂就百度。

  1. 静态成员变量在程序编译时加载,属于类变量,被类的对象共享,在这个类不运行,或者没用了,由垃圾回收机制销毁,我们可以不管它。

  2. 实例变量在类实例化对象时候创建,也就是在调用构造函数是产生的,当这个对象无效时或不在用的时候由垃圾回收机制自动销毁。

  3. 局部变量在局部范围使用时创建,当局部变量在局部方法没有时,由垃圾回收机制自动销毁。

    通过第一点就可以明白,静态成员变量在类编译时就创建了,意思是我们通过(类名.方法名)获取时,就已经存在了,并且这个类只有一个静态成员变量,无论你用不用,都已经创建了实例。
    而懒汉式代码中,静态成员变量初始是赋值为null,所以类加载时并没有创建,在我们手动执行(类名.方法名)时才创建实例,故而称之为懒汉式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值