找回密码
 FreeOZ用户注册
查看: 2488|回复: 1
打印 上一主题 下一主题

[论坛技术] 最好的Singleton实现

[复制链接]
跳转到指定楼层
1#
发表于 7-7-2008 16:50:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
Singleton模式是面向对象开发中最常用的模式了,其目的是,一个类在整个进程中只有一个实例,也就是一个对象。一般来说,用以下方法实现:(sample is C# code)

public sealed class logger
{
  private static logger instance=null;
  pirvate logger()
  {
     // initilize codes here
  }
  public static logger getInstance()
  {
    if ( null == instance )
      instance=new logger();
   
    return instance;
  }
}

由于constructor是private,外部对象只能够通过getInstance获得此类的实例,而getInstance始终返回该类的静态实例,确保只有一个类实例存在。

但在实际应用中,以上实现没有考虑多线程的问题,把多线程问题考虑进去后,代码会增加不少。

这里有个更加简单的实现 (只适用于.NET)
public sealed class Logger
{
        public static readonly Logger loginstance = new Logger();
        private Logger(){ …… };
}

这个实现基于:.NET Framework确保静态成员的初始化一定是thread safe的。

这应该是最简单的singleton代码了,可以应用于实际,也可以在面试时使用,如果面试时能够有机会用到,应该会获得加分。
回复  

使用道具 举报

2#
发表于 10-7-2008 11:07:52 | 只看该作者
不错,俺正拿这个面试别人呢。
可等到了澳洲就要被别人面试了。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 14-5-2024 17:02 , Processed in 0.030478 second(s), 18 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表