当前位置:  技术问答>java相关

如何做到对象的唯一性?

    来源: 互联网  发布时间:2015-08-03

    本文导语:  我不知道这样的表述是否正确。还是举个例子说明吧 假设有class A.主要用于充当系统参数的管理存储者 有class B, class C...是实际的业务数据处理模块。 所有的业务数据处理class都需要从class A中得到部分和自身有关...

我不知道这样的表述是否正确。还是举个例子说明吧

假设有class A.主要用于充当系统参数的管理存储者
有class B, class C...是实际的业务数据处理模块。
所有的业务数据处理class都需要从class A中得到部分和自身有关的参数
如果这样写:
public class B{         public class C{
  public B(){             public C(){
    A a = new A();          A a = new A();
  }                       }
}                       }

这样做的话,实际上内存里面有了两个a,也就是说在B、C需要用到A中存储的内容时,其实是建立了两个对象,分配了两块不相干的内存。B、C需要先构造a,然后运行a,使 a中得以有参数存放,然后再从a中去
这样的话A的存在是没有意义的
那么,能不能实现这样的要求:
系统初始化的时候A已经派生了一个对象a存在于内存中
如果B、C需要获得a中的信息,只需要引用a后,简单a.get***()就可以了
这样的话,a在内存中只有一份,系统运行中也不会有获取参数变量的开销了

谢谢

|
Creating Singleton Using a Static Method
Another approach, suggested by Design Patterns, is to create
Singletons using a static method to issue and keep track of instances. To
prevent instantiating the class more than once, we make the constructor
private so an instance can only be created from within the static method of the
class.
class iSpooler
{
//this is a prototype for a printer-spooler class
//such that only one instance can ever exist
static boolean instance_flag = false; //true if 1 instance
//the constructor is privatized-
//but need not have any content
private iSpooler() { }
//static Instance method returns one instance or null
static public iSpooler Instance()
{
if (! instance_flag)
{
instance_flag = true;
return new iSpooler(); //only callable from within
}
else
return null; //return no further instances
}
//-------------------------------------------
public void finalize()
{
instance_flag = false;
}
}

|
这实际上就是singleton模式的应用范畴:
public class A {
  private static A instance;
  private A()
  {
   xxx
  }
  public static synchronized A getInstance()
  {
    if(instance==null) 
    {
      instance = new A();
    }
    return instance;
  }
}
这样你在clsss B/C中可以使用:A a=A.getInstance();获得唯一对象实例。

|
呵呵,用简单的static关键字就可以了,让方法变成static,你可以脱离对象而存在了,也就是你可以a.getXXX()就可以直接使用了。System.out就是使用了static,如果要复杂一些,你可以采用Singlton设计模式。

|
可以用设计模式的中的single模式实现的。

|
同样,就用一个static的变量保存,每次new的时候检测对象是否存在

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 程序员跳槽前需仔细思考:你是否做到以下10点?
  • C语言在控制台下如何做到输出不滚屏
  • linux中的用户,用什么命令修改密码(要一条命令做到)???
  • 提问:FLASH能做到透明背景的小动画吗?
  • 如何做到linux和win2000的双引导呢???
  • NOSQL iis7站长之家
  • 怎么做到每秒刷新一次?
  • JSP 里面 怎么取得用户 的IP地址???有没有什么函数可以做到?
  • 请问如何做到redhat fedora core2和redhat linux enterprise 3 AS共存,谢谢
  • 请问高手,java的打印效果你们能做到什么程度?
  • 如何做到在命令行下输入文字,然后输出包含该文字的图片(bmp or gif)?
  • WAP开发中,中文显示如何做到?
  • 如何做到同步一个类中定义的一个方法?
  • 如何做到管理终端,程序依旧运行。
  • 我想删了redhat7.2,包括gurb,怎样在不伤及windows做到
  • 在网关上如何控制,可以使客户机上网时做到即插即用
  • 我要在JSP中取GIF和JPEG图片的长和宽,JSP能做到吗????????
  • /scratchbox和/scratchbox/user/<username>/scratchbox的内容完全一样,但是又不是链接,请问怎么做到的
  • 据说linux分区只能在前8G,40G的硬盘分区先装windows怎么做到呢?
  • RH7总是不认我的128M的内存。有什么有效而使初学者能够做到的办法吗?谢谢
  • 那里修改配置可以做到系统登陆进入默认是控制台,而不是图形界面?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3