单例设计模式

单例设计模式,顾名思义就是指一个类只允许产生一个实例化对象。

  • 单例模式的核心问题就是如何限制对象的产生个数???
  • 我们都知道对象的产生是通过构造方法产生的。如果构造方法用public修饰的话在类的外部就会产生无数的对象,那么第一步就是先将构造方法私有化。
  • 构造方法都私有化之后类的外部一个对象都不会产生了,而我们想要的是只产生一个对象。此时类的外部已经不可能产生对象了,那么我们就应该想到在类的内部提供一个已经实例化好的对象。而所有的普通属性必须在有实例化对象的时候才能进行内存空间的分配,而现在外部无法产生实例化对象,所以必须想一个办法,可以在单例类没有实例化对象产生的时候,也可以将属性进行使用。此时,联想到使用static关键字。
  • 目前虽然可以取得单例类的实例化对象,但是由于类中属性是由private进行封装的,所以要想取得private属性,应该提供getter()方法。由于此时访问的是static属性,并且这个类无法在外部提供实例化对象,因此应该提供一个static的getter()方法,因为static方法也不受对象实例化控制,在类的外部可以直接通过类名称调用。
饿汉式单例:
class Singleton {
    private static final Singleton singleton = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
       return singleton;
    }
}
public class Test {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        System.out.println(singleton1 == singleton2);
    }
}

在这里插入图片描述

结构:
① 构造方法私有化,使得该类的外部彻底没有对象。
② 单例类内部提供一个产生好的静态(static final) 对象。
③ 单例类内部提供一个静态方法返回唯一的一个对象,在类的外部直接通过类名称调用。

懒汉式单例:
class Singleton {
    private static final Singleton singleton;
    private Singleton() {}
    public static Singleton getInstance() {
       if(singleton == null) {
            singleton = new Singleton();
       }
       return singleton;
    }
}
  • 饿汉式单例上来就new,懒汉式单例用时再new。(要写就写饿汉式单例,懒汉式单例存在线程安全问题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值