java单例模式的应⽤场景_java项⽬中单列模式适⽤于什么场
景?
单例(Singleton)模式 也叫单态模式,是java的23种设计模式之⼀。⽹上很多介绍,我就⾔简意赅点了。
⼀、单例模式的应⽤场景
1.整个程序的运⾏中只允许有⼀个类的实例;
2.需要频繁实例化然后销毁的对象。
3.创建对象时耗时过多或者耗资源过多,但⼜经常⽤到的对象。
4.⽅便资源相互通信的环境
⼆、单例模式的在项⽬中的具体使⽤
1.封装⼀些常⽤的⼯具类,保证整个应⽤常⽤的数据统⼀
2.保存⼀些共享数据在内存中,其他类随时可以读取。
三、单例模式的俩种形式懒汉式
饿汉式
四、单例模式实现步骤
1.构造⽅法必须进⾏私有化
2.实例必须是⼀个且唯⼀,并且必须加上static属性
3.对外提供获取该类对象的共有⽅法也是static属性
五、代码说明
(1)饿汉式:在程序创建的时候就进⾏初始化,并且对象唯⼀
public class Singleton {
private static String TAG = "Singleton";
private static Singleton singleton = new Singleton();
/
/单例模式的特点,构造必须私有 private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
public void hungry() {
System.out.println("Please call me 饥饿⿁");
}
}
(2)懒汉式:需要时才创建于堆中,多线程情况下不能保证唯⼀性
public class Singleton {
private static String TAG = "Singleton";
private static Singleton singleton = null;
//单例的特点,构造必须私有 private Singleton() {
}
public static Singleton getInstance() {
if (null == singleton) {
singleton = new Singleton();
}
return singleton;
}
public void lazy() {
System.out.println("Please call me 懒汉⼦");
}
}
**注意:在多线程情况下,只能使⽤饿汉式单例模式。在多线程的情况下,如果多个线程下同时使⽤懒汉式,第⼀线程刚创建完准备要返回就被其他线程抢到了⼜重新创建了⼀遍,这时就有多个对象存在了,那就不符合单例的原则了。因此才有了饿汉式单例,⽆论是⼏个线程抢到并使⽤,对象都只会有⼀个。
当然,是不是就意味着在多线程的情况下不能使⽤懒汉式来创建单例呢?
当然不是。这个时候,就需要给线程加锁。(使⽤synchronized修饰公有⽅法即可)
public class Singleton {
java中常用的设计模式有哪些private static Singleton instance;
//单例的特点,构造必须私有 private Singleton (){
}
//使⽤synchronized修饰 public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
六、单例模式的利弊优点1.实现了整个程序对唯⼀实例访问的控制。
2.因为单例要求程序只能有⼀个对象,所以对于那些需要频繁创建和销毁的对象来说可以提⾼系统的性能,并且可以节省内存空间。
3.可以全局访问。
4.允许可变数⽬的实例。缺点1. 不适⽤于变化频繁的对象。
2.符合的场景有限。
3.如果实例化的对象长时间不被利⽤,系统会认为该对象是垃圾⽽被回收,可能会导致对象状态的丢失
4.可扩展性较差。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论