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


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

  • 相关阅读:
    04-修改域控的操作主机(主备切换)
    03-域控上删除组织单位的错误
    02-搭建域控的从节点
    01-域控服务器的搭建
    06-"Login failed for user 'NT AUTHORITYSYSTEM'. 原因: 无法打开明确指定的数据库。[客户端:<local machine>]"异常处理
    04-数据库范式
    9-系统交互式登录无需按Ctrl+Alt+Del的策略启用
    05-拒绝了对对象'server'的VIEW SERVER STATE权限
    37-SQLServer的审核/审计功能介绍
    微信小程序 设置计时器(setInterval)、清除计时器(clearInterval)
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152534.html
Copyright © 2020-2023  润新知