作者:sushengmiyan

本文地址:http://blog.csdn.net/sushengmiyan/article/details/18992741


打开IQQ项目,打开包iqq.app中的类IMApp,找到程序入口即这个类的主方法,可以看到如下代码:

    public static void main(String[] args)
    {
        LOG.info(System.getProperty("java.vm.name")
                + System.getProperty("java.version"));

        IMApp.me().startWin(); // 显示程序LOGO
        SwingUtilities.invokeLater(new Runnable() {
            public void run()
            {
                IMApp.me().startup();
            }
        });
        IMApp.me().endWin(); // 处理掉启动LOGO
    }

即程序的主方法,可以看到第一句是使用了LOG来记录日志信息,关于这个的详细信息,可以查找log4j相关的信息以及使用方法,这个东东是一个开源项目,主要是给程序员调试输出日志信息使用的。

log4j的百度百科解释:http://baike.baidu.com/view/25347.htm

维基百科:http://en.wikipedia.org/wiki/Log4j

阿帕奇官网:http://logging.apache.org/log4j/1.2/

下面就是单例模式的应用了,

    /** 单例 */
    private static final IMApp                  instance = new IMApp();

    public static IMApp me()
    {
        return instance;
    }
通过类IMApp调用单例对象me。这里就多说下单例模式,java中的单例模式,因为我也是初学java设计模式,所以有理解不到位的大家多多指教~

单例模式有三种,像IQQ这种就是饿汉式单例,它的原型是这样的:

public class Singleton
{
  private static Singleton singleton = new Singleton();
  private Singleton()
  {
  }
  private Singleton()
  {
  }
  public static Singleton getinstance()
  {
  return singleton
  }
}
还有一种是懒汉式单例,代码如下:

public class Singleton 
{
  private static Singleton singleton;
  private Singleton
  {
  }
  public static synchronized Singleton getinstance()
  {
    if (singleton = null)
    {
      singleton = new Singleton();
    }
    return singleton;
  }
}

单例模式的优点:

1.在内存中只有一个对象,节省内存空间

2.避免频繁的创建销毁对象,可以提高性能。

3.避免对共享资源的多重占用。

4.可以全局访问

适用场景:由于单例模式的以上优点,所以是编程中用的比较多的一种设计模式。
我总结了下我所知道的适合单例模式的场景:

1.需要频繁实例化然后销毁的对象。

2.创建对象时耗费时间过多,或者耗费资源过多但又经常用到的对象。

3.有状态的工具类对象

4.频繁访问数据库或者文件的对象

5.有特殊要求只能创建一个对象的场景。


单例对象的使用注意事项

1.只能使用单例类提供的方法得到单例对象,不要使用反射,否则会实例化一个对象。

2.不要做断开单例类对象与类中静态引用的危险操作

3.多线程使用单例使用资源共享的时候,注意线程安全的问题。


可以看到,IQQ中使用了单例模式,并且是类似第一种饿汉式单例的方式。

转载于:https://www.cnblogs.com/muyuge/p/6152534.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐