单例模式

饿汉式和懒汉式
1、饿汉式
①结构器私有化(避免在类的内部能够间接创立(new))
②在类的外部间接创建对象
③提供一个公共的静态方法,返回对象

public class SingleTonTest {    public static void main(String[] args) {        GrilFriend instance = GrilFriend.getInstance();        GrilFriend instance1 = GrilFriend.getInstance();        System.out.println(instance1 == instance);    }}class GrilFriend {    private static age = 18    private String name;    private static GrilFriend gf = new GrilFriend("aa");    private GrilFriend(String name) {        System.out.println("结构器被执行......");        this.name = name;    }    public static GrilFriend getInstance() {        return gf;    }}

2、懒汉式 单例模式
①结构器私有化(避免在类的内部能够间接创立(new))
②定义一个动态的对象属性
③提供一个公共的静态方法 返回对象(如果没有创建对象,则创立一个,创立过了则返回对象)
④懒汉式,只有当用户应用getInstance办法时,才会返回对象,而后再次调用时返回上次创立的对象从而保障了单例

class GrilFriend {    private static age = 18    private String name;    private static GrilFriend gf;    private GrilFriend(String name) {        System.out.println("结构器被执行......");        this.name = name;    }    public static GrilFriend getInstance() {        if (gf == null) {            gf = new GrilFriend("aa");        }        return gf;    }}

饿汉式VS 懒汉式

  1. 二者最次要的区别在于创建对象的机会不同:饿汉式是在类加载就创立了对象实例,而懒汉式是在应用时才创立。
  2. 饿汉式不存在线程平安问题,懒汉式存在线程平安问题(多个线程同时调用时,对象没创立完就会导致创立多个对象)
  3. 饿汉式存在浪费资源的可能,懒汉式则没有
  4. 在JavaSE规范类中,java.lang.Runtime就是经典的饿汉式单例模式