Java中⼏种常⽤的单例模式
单例模式:
单例模式是Java语⾔23中设计模式中最常见的⼀种设计模式.
单例模式确保⼀个类只有⼀个实例,⾃⾏提供这个实例并向整个系统提供这个实例。
特点:
1,⼀个类只能有⼀个实例
2,⾃⼰创建这个实例
3,整个系统都要使⽤这个实例
常⽤的⽅式:
懒汉式和饿汉式两种实现⽅式,各有优缺点.
作⽤:
防⽌多个实例,创建出多个线程同时进⾏.例如:⽕车站买票,就10张票,同时100个⼈在买,如果不进⾏限制,够的票会出现负数. ⼜例如:办公室就⼀台打印机,多个同事同时要打印资料,如果不进⾏相应的约束,结果会是什么样? 这就是单例模式应运⽽⽣的作⽤;
java中常用的设计模式有哪些这⾥只列出最常⽤的单例模式:
懒汉式:
/**
* 懒汉模式线程不安全,加锁后可以实现线程安全,下⾯此⽅法线程安全.
* 懒汉模式中单例是在需要的时候才去创建的,如果单例已经创建,
* 再次调⽤获取接⼝将不会重新创建新的对象,⽽是直接返回之前创建的对象。
* 如果某个单例使⽤的次数少,并且创建单例消耗的资源较多,那么就需要实现单例的按需创建,
* 这个时候使⽤懒汉模式就是⼀个不错的选择
* @author 狂神666
*
*/
public class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式:
/**
* 饿汉简单的单例
* 优点:类加载时创建⼀次实例,不存在多个线程创建多个实例情况,避免多线程同步问题
缺点:内存会浪费
适合:占⽤内存较⼩,在初始化时就会被⽤到;
* @author 狂神666
*
*/
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
静态内部类:
/**
* 静态内部类
* 这种⽅式同样利⽤了类加载机制来保证只创建⼀个instance实例.
* 它与饿汉模式⼀样,也是利⽤了类加载机制,因此不存在多线程并发的问题。
* 不⼀样的是,它是在内部类⾥⾯去创建对象实例。这样的话,只要应⽤中不使⽤内部类, * JVM就不会去加载这个单例类,也就不会创建单例对象,从⽽实现懒汉式的延迟加载。 * 也就是说这种⽅式可以同时保证延迟加载和线程安全。
* @author 狂神666
*
*/
public class Singleton{
private static class Singleton{
private static Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton getInsatance(){
return SingletonHolder.instance;
}
}
枚举:
/**
* 枚举
* 使⽤枚举除了线程安全和防⽌反射调⽤构造器之外,
* 还提供了⾃动序列化机制,防⽌反序列化的时候创建新的对象。
* @author 狂神666
*
*/
public enum Singleton{
instance;
public void whateverMethod(){}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论