成都汇智知了堂IT培训机构
IT培训课程升级
IT培训机构知了堂联系方式

什么是java单例设计模式


1. 什么是设计模式

  • 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,他不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳定性以及安全性的解决方案。

  • 1995年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称[GoF设计模式]

什么是java单例设计模式

一、单例模式

意图:保证一个类仅有一个实例,并提供一个访问他的全局访问点。

主要解决:一个全局使用的类频繁的创建与销毁。

何时使用:当您想控制实例数目节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

image-20210303222909412

1. 饿汉式单例

java //饿汉式单例 public class Hungry{ //可能会浪费空间 private byte[] data1=new byte[1024*1024]; private byte[] data2=new byte[1024*1024]; private byte[] data3=new byte[1024*1024]; private byte[] data4=new byte[1024*1024]; private Hungry(){ } private final static Hungry HUNGRY = new Hungry(); public static Hungry getInstance(){ return HUNGRY; } }

饿汉式单例由于new一个对象时不是一个原子性操作,即 new一个对象时, java内部会进行更细致的线程操作,则导致在多线程的条件下会不安全

2. 懒汉式单例

java //懒汉式单例 public class LazyMan{ private LazyMan(){ } private volatile static LazyMan lazyMan; //双重检测模式的懒汉式单例 ,即DCL懒汉式 public static LazyMan getInstance(){ if(lazyMan==null){ synchronized(LazyMan.class){ if(lazyMan==null){ lazyMan=new LazyMan(); //不是一个原子性操作 /** 1.分配内存空间 2.执行构造方法,初始化对象 3.把这个对象指向这个空间 123 A 132 B 此时lazyMan还没有完成构造 **/ } } } return lazyMan; } //多线程下不安全 //多线程并发 public static void main(String[] args){ for(int i = 0; i < 10; i++){ new Thread(()->{ lazyMan.getInstance(); }).start(); } }}

3. 内部类实现单例

java //静态内部类实现public class Holder{ public static class InnerClass{ } public static Holder getInstance(){ return InnerClass.HOLDER; } publ


实战教学·项目驱动

177 1362 3990
预约免费试学
点击咨询
预约试学