黑马程序员----单例模式Singleton (笔记)

本文详细介绍了单例模式的概念、特点及实现方式,包括饿汉式和懒汉式的具体代码实现。并强调了单例模式在多线程环境下的线程安全性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

类型:创建类模式


从上面的类图中可以看出,在单例类中有一个构造函数 Singleton ,

但是这个构造函数却是私有的(前面是“ - ”符号),

然后在里面还公开了一个 GetInstance()方法,

通过上面的类图不难看出单例模式的特点,从而也可以给出单例模式的定义

单例模式保证一个类仅有一个实例,同时这个类还必须提供一个访问该类的全局访问点。



要素:

1、私有的构造方法

2、指向自己实例的私有静态引用

3、以自己实例为返回值得静态公有的方法



饿汉单例

public class Singleton {

private static Singleton singleton = new Singleton();

private Singleton(){}

public static Singleton getInstance(){

return singleton; 

}

  }  

懒汉单例

public class Singleton {
private static Singleton singleton;
private Singleton(){}

public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}


注意事项:

    1、只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。

    2、不要做断开单例类对象与类中静态引用的危险操作。

    3、多线程使用单例使用共享资源时,注意线程安全问题。


懒汉单例线程不安全,加synchronized关键字修饰后,对性能有部分影响,但是却是线程安全的,并不会产生实例化多个对象的情况。


单例类,饿汉和懒汉由于构造方法是private,所以是不可继承。其他单例模式可以继承


Java中饿汉单例要优于懒汉单例

---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值