Java学习35-Java 单例Singleton类

单例(Singleton)类

大部分都把类的构造器定义成public,允许任何类自由创建该类的对象。
但在某些时候,允许其他类自由创建该类的对象可能造成系统性能下降(因为频繁的创建对象,会产生回收对象带来的系统开销问题)
如果我们要求一个类只能创建一个实例,则这个类被称为单例类。

该类只能创建一个对象。

该类的构造器加private修饰,这样把该类的所有构造器隐藏起来。
提供一个static public方法作为该类的访问点,用于创建该类的对象
此外需要使用一个static 成员变量(保存曾经创建过的那个唯一的对象)。

调用单例类的方法:
建立新的instance时候用的是method XXX.getInstance()

写代码的时候注意检查,单例类构建代码应会出现2处static,2处private关键字。

  • constructor有关的设置只加private
  • instance有关的设置都加static
    • 首次定义的instance除了static还要有private
    • getInstance()只是static标注

下面是一个典型的创建一个Singleton的例子:

package ThreadSafe;

public class SingletonTest {
    public static void main(String[] args) {
        //创建Singleton对象不能通过构造器
        //只能通过getInstance方法得到实例
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1==s2); //输出结果为true
        // 因为Singleton类只能产生一个实例,所以上面两次产生的对象实际上是同一个对象
    }
}

class Singleton{

    //使用一个类变量 缓存曾经创建的实例
    private static Singleton instance;

    //对构造器使用private修饰,隐藏该构造器
    private Singleton(){}

    //提供一个静态方法,用于返回Singleton实例
    //该方法能够控制保证只能产生一个Singleton对象
    public static Singleton getInstance(){
        //如果instance为null,则表明还不曾创建Singleton对象
        //如果instance不为null,则表明已经创建Singleton对象,就不会再创建新的实例
        if(instance == null){
            //创建一个Singleton对象,并将其缓存起来
            instance = new Singleton();
        }
        return instance;
    }
}

运行结果(因为单例类的两个对象其实就是同一个对象,所以得到true)

true

Process finished with exit code 0
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值