java单例模式

java单例模式

单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

目录
单例模式的特点:
优点:
缺点:
单例模式的特点:
1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

优点:
1、在内存里只有一个实例,减少了内存的开销。

2、避免对资源的多重占用。

缺点:
没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

单例模式的几种实现方式:

1.懒汉式(线程不安全)
public class testObject{
//创建一个对象
private static testObject instance;

//一个私有的构造方法,保证该对象不会被new出来
private testObject(){}
//获取唯一可用对象

public static testObject getIstance(){
    if(instance == null){
        instance = new instance;
    }
    return instance;
}

public void showMessage(){
    System.out.println("Hello Java!");
}

}
2.懒汉式(线程安全)
public class testObject{
private static testObject instance;

private testObject(){}
//同步方法保证在多线程下也能拿到唯一实例
public static synchronized testObject getInstance(){
    if(instance == null){
        instance = new testObject();
    }
    return instance;
}

public static void showMessage(){
    System.out.println("Hello Java!");
}

}
3.饿汉式(线程安全)
public class testObject{
//直接初始化
private static testObject instance = new testObject();

private testObject(){}

public static testObject getInstance(){
    return instance;
}

}
4.双重检查(线程安全)
public class testObject{
//volatile关键字修饰
private volatile static testObject instance;

private testObject(){}

public static testObject getInstance(){
    if(instance == null){
        synchronized(testObject.class){
            if(instance == null){ //这里可能线程不安全,需要加valotile关键字,刷新其他线程引用缓存
                instance = new testObject();
            }
        }
    }
    return instance;
}

}

一般情况下,不建议使用第 1 种和第 2 种懒汉方式,建议使用第 3 种饿汉方式。

你可能感兴趣的:(设计模式)