JAVA单例模式,java单例模式详解
什么是单例模式?
Singleton模式是一种常见的设计模式,它保证一个类的实例是单例的。
单例模式的优点:
(1)首先,必须是节省内存资源。无论通过暴露方法创建实例有多频繁,都可以保证创建的对象是系统内存中相同的实例对象;
(2)灵活性,因为所有实例的创建都由这个类控制,所以这个类可以灵活改变实例化过程;
(3)实例的受控访问,singleton类可以轻松控制唯一实例的受控访问;
单例模式的缺点:
(1) singleton模式没有接口,不容易扩展;
(2)使用时,不能用反射模式创建singleton,否则会实例化一个新的对象;
(3)使用懒惰单例模式时注意线程安全;
实现单例模式的方式:
饿单例方式
包索引;
公共类超人{
//空构造函数
私人超人(){}
//实例化该对象
私人静态超人supermanInstance=新超人();
//获取实例化对象的静态函数getSupermanInstance()。
公共静态超人getSupermanInstance(){
返回supermanInstance
}
} Hungry singleton在加载类的时候提前更新了,一开始就实例化了一个supermanInstance对象。不管你的程序是否需要调用这个对象,它都准备好了;没有延迟加载,大多数情况下需要延迟加载来减少程序负载,所以这种实现singleton的方式并不是最好的选择。
懒单例方式(单线程写法)
包索引;
公共类超人{
//空构造函数
私人超人(){}
//实例化该对象;只声明new不用于实例化。
私静超人supermanInstance=null
//获取实例化对象的静态函数getSupermanInstance()。
公共静态超人getSupermanInstance(){
If(supermanInstance==null){ //如果为null,则再次实例化。
supermanInstance=新超人();
}
返回supermanInstance
}
}声明一个对象而不实例化它。当程序需要实例化时,调用静态工厂方法getSuperManistance()。该方法判断声明的对象,如果为空,则再次实例化该对象。这种写入方式可以达到延迟加载的效果,但是非线程安全。如果两个线程在多个线程中同时调用静态工厂方法getSuperManistance(),就有可能重复创建该类的实例,破坏单例的唯一性。
推荐教程:java教程以上是什么是Java singleton模式的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。