java学习之单例设计模式

什么是单例设计模式:

  单例设计模式是一种可以让该类只创建一个公共的对象的设计模式,可以避免多线程情况下每个对象创建一个对象导致的内存问题;

为什么使用单例设计模式:

  节约内存,操作方便!

怎么使用单例设计模式:

  1、私有化构造函数,让其他类在调用本类是无法直接创建对象。

  2、自主创建一个私有静态引用,指向本类对象

  3、创建一个公共的方法,用于对外返回本类创建的对象

分类:

  1、饿汉单例设计模式(加载类的时候就已经创建了对象)

    优缺点:使用简单,避免了线程同步问题,但如果从始至终从未使用过这个实例,则会造成内存的浪费。

  2、懒汉单例设计模式(在真正调用的时候去创建对象)

    优缺点:只有被引用才会创建对象,不存在资源浪费的情况,但存在线程安全问题,在多线程的时候会出现问题(不推荐使用)

实例:

  饿汉单例设计模式:

 1 public class Single {
 2     //当有成员变量的时候一般不用单例模式吧???
 3     //步骤1:私有化构造函数
 4     private  Single(){
 5     }
 6     //步骤2 创建一个s,指向Single()
 7     private static Single s =new Single();
 8     //步骤3:创建一个公共访问的静态方法,返回创建的对象
 9     public  static Single  getInstance(){
10         return s;
11     }
12   //原来的方法
13     public void Test(){
14         System.out.println("调用了饿汉单例设计模式!!");
15     }
16 }

  懒汉单例设计模式:

public class Single2 {
    //懒汉设计模式
    //步骤1:私有化构造函数
    private Single2(){
    }
    //步骤2:定义一个私有静态的引用s1接收对象的实例
    private  static  Single2 s1 ;

    //步骤3:定义一个方法,实现对对象的返回
    public static Single2 getInstance(){
        if(s1 == null){            //做一个判断,如果s1没有指向对象,则给它指向本类对象
            s1 = new Single2();
        }
        return s1;
    }
    //本类原有方法
    public void test2(){
        System.out.println("调用了懒汉设计模式!!");
    }
}

  调用方法都一样:

public class Main {
    public static void main(String[] args){
    //调用饿汉设计模式类
        Single s = Single.getInstance();
        s.Test();
    //调用懒汉设计模式类
        Single2 s2 = Single2.getInstance();
        s2.test2();
    }
}

结果:

调用了饿汉单例设计模式!!
调用了懒汉设计模式!!

Process finished with exit code 0

应用场景:

  并不是所有的设计都是用单例设计模式,应该更具具体的需求去选择设计模式,盲目使用单例设计模式会造成其他问题:

  • 1.需要生成唯一序列的环境
  • 2.需要频繁实例化然后销毁的对象。
  • 3.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 
  • 4.方便资源相互通信的环境

  标红总结引用自博主:一指流砂~   深入理解设计模式(一):单例模式 

 

 

 

 

 

 

  

posted @ 2020-04-10 11:21  柚子李子  阅读(145)  评论(0编辑  收藏  举报