java开源项目之IQQ学习记录之单例模式与log4j日志记录

作者:sushengmiyan

打开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中使用了单例模式,并且是类似第一种饿汉式单例的方式。

即使爬到最高的山上,一次也只能脚踏实地地迈一步。

java开源项目之IQQ学习记录之单例模式与log4j日志记录

相关文章:

你感兴趣的文章:

标签云: