当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

singleton情势[Java编程]

赞助商链接



  本文“singleton情势[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

大概最简单的计划范式就是“单子”(Singleton),它能供应对象的一个(并且只有一个)实例.单子在Java库中得到了利用,但下面这个例子显得更直接一些:

//: SingletonPattern.java
// The Singleton design pattern: you can
// never instantiate more than one.
package c16;

// Since this isn't inherited from a Cloneable
// base class and cloneability isn't added,
// making it final prevents cloneability from
// being added in any derived classes:
final class Singleton {
  private static Singleton s = new Singleton(47);
  private int i;
  private Singleton(int x) { i = x; }
  public static Singleton getHandle() { 
    return s; 
  }
  public int getValue() { return i; }
  public void setValue(int x) { i = x; }
}

public class SingletonPattern {
  public static void main(String[] args) {
    Singleton s = Singleton.getHandle();
    System.out.println(s.getValue());
    Singleton s2 = Singleton.getHandle();
    s2.setValue(9);
    System.out.println(s.getValue());
    try {
      // Can't do this: compile-time error.
      // Singleton s3 = (Singleton)s2.clone();
    } catch(Exception e) {}
  }
} ///:~
成立单子的关键就是避免客户程序员采取除由我们供应的之外的任何一种方法来成立一个对象.必须将全部构建器都设为private(私有),并且至少要成立一个构建器,以避免编译器帮我们自动同步一个默许构建器(它会自做聪明地成立成为“友好的”——friendly,而非private).
此时应决意若何成立自己的对象.在这儿,我们挑选了静态成立的方法.但亦可挑选等候客户程序员发出一个成立恳求,然后按照他们的要求动态成立.不管在哪类情形下,对象都应当保存为“私有”属性.我们通过公用办法供应拜候途径.在这里,getHandle()会产生指向Singleton的一个句柄.剩下的接口(getValue()和setValue())属于普通的类接口.
Java也答应通过克隆(Clone)方法来成立一个对象.在这个例子中,将类设为final可禁止克隆的发生.由于Singleton是从Object直接担当的,所以clone()办法会保持protected(受保护)属性,不可以利用它(强行利用会造成编译期错误).但是,假定我们是从一个类构造中担当,那个构造已经过载了clone()办法,使其具有public属性,并实现了Cloneable,那么为了禁止克隆,需求过载clone(),并掷出一个CloneNotSupportedException(不支持克隆违例),就象第12章介绍的那样.亦可过载clone(),并简单地返回this.那样做会造成一定的混合,因为客户程序员大概错误地认为对象还没有克隆,仍旧操作的是本来的那个.
注意我们并不限于只能成立一个对象.亦可操纵该技术成立一个有限的对象池.但在那种情形下,大概需求办理池内对象的同享问题.假如不幸真的碰到这个问题,可以自己计划一套筹划,实现同享对象的登记与撤消登记.
  以上是“singleton情势[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Java学习笔记-03用私有构造器大约摆列典范强化Singleton属性
  • A " = [ 参数 ] " MISSING 关于 Access 2007年中切换窗体对象
  • singleton情势
  • Acegi(十二):anonymousProcessingFilter有什么好玩的?
  • <b>在Java中操纵筹划情势之Singleton</b>
  • C++/CLI中实现singleton情势
  • <b>c++ using namespace详解</b>
  • <b>计划情势的解析和实现(C++)之五-Singleton情势</b>
  • ASP.NET中using的用法
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .