单例模式

  • 采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
  1. 构造器私有化(防止直接new对象)
  2. 在类的内部创建对象(私有的,静态的)
  3. 提供一个公共的静态的方法,调用对象(方法静态是为了调用静态对象)

饿汉式

public class SingleObject {
    private  String name;

    private  SingleObject(String name) {
        this.name = name;
    }
    private  static  SingleObject  singleObject =new SingleObject("张洋");
    public  static SingleObject getSingleObject(){
        return singleObject ;
    }
    
    @Override
    public String toString() {
        return "SingleObject{" +
                "name='" + name + '\'' +
                '}';
    }
}

懒汉式

public class SingleObject {
    private  String name;

    private  SingleObject(String name) {
        this.name = name;
    }
    private  static  SingleObject  singleObject ;
    public  static SingleObject getSingleObject(){
        if ( singleObject==null) {
            return singleObject = new SingleObject("lyogurts");
        }
    return singleObject;
    }

    @Override
    public String toString() {
        return "SingleObject{" +
                "name='" + name + '\'' +
                '}';
    }
}

class  runs {
    public static void main(String[] args) {
        SingleObject  exp= SingleObject.getSingleObject();
        System.out.println(exp);
    }
}

饿汉式vs懒汉式

  1. 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
  3. 饿汉式存在浪费资源可能,如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费资源了,懒汉式式使用时才创建,就不存在这个问题
  4. javase中,java.lang.Runtime就是经典的单例模式
最后修改:2022 年 04 月 04 日 11 : 29 AM