安全黑客
当前位置:安全黑客文章资讯编程技术Java编程
日期:2012-04-05 13:25:00  来源:本站整理

Java学习笔记-03用私有构造器大约摆列典范强化Singleton属性[Java编程]

赞助商链接



  本文“Java学习笔记-03用私有构造器大约摆列典范强化Singleton属性[Java编程]”是由安全黑客为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  关于单实例情势,相信很多开辟者并不陌生,但是若何更好更安全的成立单实例对象还是需求一些推敲和考虑的,在Java中主要的成立方法有以下三种,我们辨别作出注释和得当的对比.

  1. 将构造函数私有化,直接通过静态公有的final域字段获得单实例对象:

  [java] public class Elvis {

  public static final Elvis INSTANCE = new Elvis();

  private Elivs() { ... }

  public void leaveTheBuilding() { ... }

  }

  public class Elvis {

  public static final Elvis INSTANCE = new Elvis();

  private Elivs() { ... }

  public void leaveTheBuilding() { ... }

  }这样的方法主要上风在于简便高效,利用者很快就可以断定当前类为单实例类,在调用时直接操作Elivs.INSTANCE便可,由于没有函数的调用,因此效率也非常高效.但是事物是具有一定的双面性的,这种计划方法在一个方向上走的过于极度了,因此他的缺陷也会是十清楚显的.假如此后Elvis的利用代码被迁移到多线程的利用环境下了,系统但愿可以做到每个线程利用同一个Elvis实例,差别线程之间则利用差别的对象实例.那么这种成立方法将无法实现该需求,因此需求改正接口以及接口的调用者代码,这样就带来了更高的改正本钱.

  2. 通过公有域成员的方法返回单实例对象:

  [java] public class Elvis {

  public static final Elvis INSTANCE = new Elvis();

  private Elivs() { ... }

  public static Elvis getInstance() { return INSTANCE; }

  public void leaveTheBuilding() { ... }

  }

  public class Elvis {

  public static final Elvis INSTANCE = new Elvis();

  private Elivs() { ... }

  public static Elvis getInstance() { return INSTANCE; }

  public void leaveTheBuilding() { ... }

  }

  这种办法很好的补偿了第一种方法的缺陷,假如此后需求适应多线程环境的对象成立逻辑,仅需求改正Elvis的getInstance()办法内部便可,对用调用者而言则是不变的,这样便极大的缩小了影响的范围.至于效率问题,当今的JVM针对该种函数都做了很好的内联优化,因此不会产生因函数频繁调用而带来的开销.

  3. 利用列举的方法(Java SE5):

  [java] public enum Elvis {

  INSTANCE;

  public void leaveTheBuilding() { ... }

  }

  public enum Elvis {

  INSTANCE;

  public void leaveTheBuilding() { ... }

  }就目前而言,这种办法在功效上和公有域方法相近,但是他越发简便越发清楚,扩大性更强也越发安全.

  摘自 horsttnann的专栏


  以上是“Java学习笔记-03用私有构造器大约摆列典范强化Singleton属性[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看安全黑客为您推荐以下文章:
  • 甲骨文的Java序器安全管理器旁路远程执行代码漏洞
  • 甲骨文的Java ManagedObjectManagerFactory安全管理器旁路远程代码执行Vulnerabillity
  • 甲骨文的Java AWT内存损坏远程代码执行漏洞
  • 甲骨文的Java CMMImageLayout内存腐败远程代码执行漏洞
  • 甲骨文的Java ByteComponentRaster缓冲区溢出远程执行代码漏洞
  • 甲骨文的Java AWT内存损坏远程代码执行漏洞
  • 甲骨文的Java IntegerComponentRaster缓冲区溢出远程执行代码漏洞
  • 甲骨文的Java ShortComponentRaster缓冲区溢出远程执行代码漏洞
  • Oracle的Java cmmColorConvert的远程代码执行漏洞
  • 甲骨文的Java运行时环境AWT mediaLib的远程代码执行漏洞
  • 甲骨文Java图像ColorConvert远程代码执行漏洞
  • 甲骨文Java密钥库安全管理器旁路远程代码执行漏洞
  • 本文地址: 与您的QQ/BBS好友分享!

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    免责条款 - 广告合作 - 下载声明 - 欢迎投稿 - 友情连接 - 网站地图 -
    Copyright © 2012-2013 www.110hack.com. All Rights Reserved .