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

java开源项目之IQQ学习记录之单例模式与log4j日志记录的更多相关文章

  1. java开源项目之IQQ学习记录之项目环境搭建与启动

    本文链接地址:http://blog.csdn.net/sushengmiyan/article/details/18779727 作者:sushengmiyan 现在就码字说说今天晚上搞定的一个项目 ...

  2. 用Java开源项目JOONE实现人工智能编程

    http://www.robotsky.com/ZhiN/MoS/2011-08-25/13142461416649.html 用Java开源项目JOONE实现人工智能编程 https://sourc ...

  3. 3月份GitHub上最热门的Java开源项目

    今天,我们来盘点3月份GitHub上最热门的Java项目的时候了,如果你每月都有关注猿妹发布的排行榜,那么本月的Java项目对你来说一定不陌生,这些都是曾经多次出现在榜单中的项目: 1 advance ...

  4. Android开源项目SlidingMenu本学习笔记(两)

    我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...

  5. 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!

    Awsome Java Great Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序 ...

  6. 阿里巴巴的26款Java开源项目

    阿里巴巴的26款Java开源项目 开源展示了人类共同协作,成果分享的魅力.没有任何一家网络公司可以不使用开源技术,仅靠自身技术发展起来.“取之于开源,用之于开源,才能促进开源的良性发展”,阿里巴巴各个 ...

  7. java开源项目

    原文地址:http://blog.longjiazuo.com/archives/2625 1.整理出一些使用比较广或者个人觉得比较好的java开源项目和资料供参考.2.如果你觉得好但是我没有列出的开 ...

  8. 硬核! Github上 ,star超高的Java 开源项目分享给你!

    Awsome JavaGreat Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序员 ...

  9. 网上下载的 java开源项目 如何 打jar包

    目前很多java开源项目(例如qlexpress)只提供了源码,没有提供jar,下面提供maven打jar包的方法. 1.进入qlexpress下载后源代码所在的目录,此目录应包含pom.xml,如下 ...

随机推荐

  1. easyui datagrid 得到冻结列跟非冻结列

    var head = $('#ClassManagement').datagrid("options").columns; var fhead=$('#ClassManagemen ...

  2. junit4.9测试用例 spring测试用例 Assert 注解

    junit4.9测试用例 测试基类 import org.junit.runner.RunWith; import org.springframework.test.context.ContextCo ...

  3. 解决IE6下select显示在弹出框上问题

    利用定位position:absolute;z-index:1;和iframe[z-index:-1]来解决此问题,最好根据需要加上: border='0' frameborder='0' scrol ...

  4. JavaScript 比较和逻辑运算符

    比较和逻辑运算符用于测试 true 或者 false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 给定 x=5,下面的表格解释了比较运算符: 实例 »实例 » 大于 大于或等于 ...

  5. 论文答辩ppt要怎么写

    1.总体原则: 字大.字少.图多.要有重点 字体建议:正文要用黑体(如微软雅黑),标题可使用宋体或者黑体(如微软雅黑) 2. 主要分为两大部分: 2.1系统介绍 系统概述:概述自己系统主要是做了些什么 ...

  6. springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)

    之前两篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)和springMVC源码解析--HandlerMethodArgumentResol ...

  7. 20160224.CCPP体系详解(0034天)

    程序片段(01):指针与结构体.c 内容概要:指针与结构体 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include < ...

  8. 去除CSDN 博客页广告的历程

    第一招 方式1 方式2 第二招 第三招 素材准备 必备知识 代码部分 测试 总结 作为CSDN的忠实用户,我觉得它挺不错的.美中不足的是广告,虽然相比于微博啊,开源中国啊这些博客站点,它的广告已经算是 ...

  9. Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04

    Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...

  10. Hexo写博客

    hexo配置github Git Install hexo-deployer-git. $ npm install hexo-deployer-git –save 配置_config.yml文件 de ...