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.方便资源相互通信的环境
标红总结引用自博主:一指流砂~ 深入理解设计模式(一):单例模式
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
保持学习的劲头