单例模式的学习

Roy 2019-02-12 01:4767 阅读

单例模式

第一章介绍

单例设计模式:保证类在内存中只有一个对象

第二章饿汉式(上来就创建私有的本类对象)

    /*

     *

     * 单例设计模式:保证类在内存中只有一个对象

     */

public static void main(String[] args) {

//  Singleton s1= new Singleton(); //3.由于私有构造方法,类外无法直接new 对象

    /*Singleton s1= Singleton.s;

    Singleton s2= Singleton.s;

    System.out.println(s1==s2);*/

    //上述两行会导致能够修改s的值所以得私有成员变量

    //5.重新通过get方法获得成员变量

    Singleton s1= Singleton.getInstance();

    Singleton s2= Singleton.getInstance();

    System.out.println(s1==s2);

}

 

}

/*

 * 饿汉式

 */

class Singleton{

    //1.私有构造方法,类外无法直接new 对象,其他类无法访问该方法

    private Singleton() {

    }

    //2.创建本类对象

//  public static Singleton s =new Singleton();//会导致能够修改s的值所以得私有成员变量

    private static Singleton s =new Singleton();

    //4.对外提供公共的访问方法get方法

    public static Singleton getInstance() {

       return s;

    }

}

第三章懒汉式(单例的延迟加载,用的时候再创建对象)

/*

 * 懒汉式:单利模式的延迟加载模式

 * 会有安全隐患

 */

class Singleton2 {

    //1.创建本类对象,但不实例化

    private static Singleton2 s;

    //2.私有化构造方法

    private Singleton2 () { 

    }

    //3.对外提供公共的访问方法

    public static Singleton2 getInstance() {

       if(s==null) {

           //多线程情况下,当线程1进入if后等待,cpu使用权被线程2抢去了也进入了if判断语句那么最终会造成多个对象被创建出来

           //所以懒汉式一般不使用

           s=new Singleton2();

       }

       return s;

    }

}

第四章饿汉式和懒汉式的区别

  1. 饿汉式是空间换时间,在服务器启动的时候就创建了对象
  2. 懒汉式是时间还空间,在用的时候再创建对象,但是不推荐本模式
  3. 在多线程访问时,饿汉式不会创建多个对象,懒汉式有可能会创建多个对象

第五章单例模式的第三种方法final

class Singleton3 {

    //1.创建本类对象,但不实例化

    public static final Singleton3 s= new Singleton3();

    //2.私有化构造方法

    private Singleton3 () { 

    }

    //3.对外提供公共的访问方法

    public static Singleton3 getInstance() {

       return s;

    }

}

回复数量: 0
暂无评论~~
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!