您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

Java设计模式(3):单例模式 <企业网站源码>

  • 时间:2022-07-09 00:15 编辑: 来源: 阅读:282
  • 扫一扫,手机访问
摘要:Java设计模式(3):单例模式 <企业网站源码>
1.singleton模式在任何一种开发语言中,singleton模式都应该算是大家接触和学习的第一种设计模式,因为它最简单,最常用。 singleton模式的特点:只有一个例子;该方法是私有的;它的实例只能自己创建;单体模式的使用场景:全局配置;客户端客户端缓存;诸如此类;也适时使用案例。感觉简单就不要乱用!二、Java中的实现方法。有多少种方法可以实现单例模式?我至少可以用五种方法来做这件事。如果还有更多方法,请在评论区留言。 2.1.简单暴力/* * *没有延迟加载,但是是最简单的*/public类singleton { private static final singleton instance = new singleton();私有Singleton(){}公共静态Singleton getInstance(){ return instance;}}2.2.延迟加载对于2.1,类在加载时被初始化。这里,采用延迟初始化。 /* * *推迟加载*/public class singleton { private static singleton instance = null;private Singleton(){ } public synchronized static Singleton getInstance(){ if(instance = = null){ instance = new Singleton();}返回实例;}}2.3、静态内部类延迟加载/* *静态内部类,加载时没有初始化实例,从而实现延迟加载*/公共类singleton {私有静态类内部singleton {私有静态最终singleton instance = new singleton();} private Singleton(){ } public static Singleton getInstance(){ return internal Singleton . instance;}}2.4,双搜索(DCL)这种方式,要注意,网上有些错误。 公共类Singleton { private static volatile Singleton instance = null;//这里需要volatile private singleton(){ } public static singleton getinstance(){ if(instance = = null)。{ synchronized(Singleton . class){ if(instance = = null){ instance = new Singleton();} } }返回实例;}}为什么要加volatile?可以去看看我的小白系列五:关键词挥发。 2.5.枚举方法(仅受JDK 1.5支持)公共枚举Singleton { instance//默认实例= this public void function () {//.......................................................................................................................................................... 导入Java . lang . reflect . constructor;public class Demo { public static void main(String[]args){ Singleton Singleton 1 = Singleton . getinstance();Singleton singleton2 = nulltry { Constructor Constructor = singleton . class . getdeclaredconstructor();constructor . set accessible(true);Singleton 2 =(Singleton)constructor . new instance();} catch(Exception e){ e . printstacktrace();} system . out . println(" singleton 1 = "+singleton 1);如果(singleton2!= null){ system . out . println(" singleton 2 = "+singleton 2);}}}打印出来的结果如下:Singleton 1 = Singleton @ 610455d 6 Singleton 2 = Singleton @ 511d 50 c 0我们可以看到Singleton变成了多实例。 另一方面,枚举不允许反射。JDK源代码中有一个判断://Java . lang . reflect . constructor . Java公共最终类构造函数< T & gt扩展可执行文件{.....@ caller sensitive public T new instance(Object...initargs)抛出InstantiationException、IllegalAccessException、IllegalArgumentException、InvocationTargetException { if(!override) { if(!reflection . quick check member access(clazz,modifiers)){ Class & lt;?& gtcaller = reflection . getcallerclass();checkAccess(调用者、clazz、null、修饰符);} }//这里会判断类的修饰符。如果是枚举,则返回错误if((clazz . get modifiers()& Modifier)。枚举)!= 0)抛出new IllegalArgumentException("无法反射性地创建枚举对象");ConstructorAccessor ca = constructor accessor;//read volatile if(ca = = null){ ca = acquire constructoraccessor();} @ suppress warnings(" unchecked ")T inst =(T)ca . new instance(initargs);返回inst} ......}3.2、内存消耗与静态常量相比,枚举会多消耗一点内存。因为枚举一开始是一个类,然后这个类被final修饰的几个对象被实例化,所以每个实例都有自己的一点点元信息。 常量没有这层封装,只占用基本内存(包括引用和它的值本身),所以要简单轻便。如果该值是基本类型而不是包装类型,则占用的内存较少。 枚举的使用和单例的使用一样,应该是适度的,不应该滥用。同样,当您使用枚举时,不要担心额外的内存开销。需要的时候还是要用的。 同时需要注意一点:枚举的出现可以帮助我们提高代码的可读性和可伸缩性;所以相对于一点点额外的内存开销,不建议牺牲代码可读性、可维护性和开发效率而不枚举。 总之Java的singleton模式,我更喜欢用枚举来实现!


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部