设计模式之单例模式学习

什么是单例模式

	单例模式是一种对象创建型模式,使用单例模式可以保证一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。
	GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。

单例模式的使用场景

在应用系统开发中,我们常常有以下需求:

  • 在多个线程之间,比如servlet环境,共享同一个资源或者操作同一个对象,这个时候保证同一个实例
  • 在整个程序空间使用全局变量,共享资源
  • 大规模系统中,为了性能的考虑,需要节省对象的创建时间等等
    因为Singleton模式可以保证为一个类只生成唯一的实例对象,所以这些情况,Singleton就可以派上用场了。

单例模式的实现

单例模式有二种实现方式,饿汉式和懒汉式

一、饿汉式
饿汉式就是在类加载的时候就对其进行初始化。不管你用的上还是用不上,一开始就给你创建对象。

public class Person {
 	//初始化	
    static final Person  person= new Person();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private String name;
    //构造函数私有化
    private Person(){
    }
    //提供一个全局的静态方法
    public static Person getPerson(){
        return person;
    }
}

二、懒汉式
懒汉式 就是当你需要的时候在进行创建对象。

public class Person {
    public static Person person;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private String name;

    //构造函数私有化
    private Person(){}
    //提供一个全局的静态方法
    //饿汉模式在多线程情况下不能保证唯一实例
    // 可以加synchroized 关键字,以及逻辑判断来进行控制,但不保证绝对的唯一
    public static Person getPerson(){
        if(person ==null){
            synchronized (Person.class){
                if( person == null){
                    return new Person();
                }
            }
        }
        return  person;
    }
}

饿汉与懒汉的比较

饿汉式当类加载的时候就进行初始化。这样就不管是单线程还是多线程都保证了一份实例。
懒汉式在单线程情况下可以保证一份实例,多线程情况下不保证唯一实例。只能用控制机制来加以控制,不能保证绝对的唯一。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值