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中使用了单例模式,并且是类似第一种饿汉式单例的方式。
java开源项目之IQQ学习记录之单例模式与log4j日志记录的更多相关文章
- java开源项目之IQQ学习记录之项目环境搭建与启动
本文链接地址:http://blog.csdn.net/sushengmiyan/article/details/18779727 作者:sushengmiyan 现在就码字说说今天晚上搞定的一个项目 ...
- 用Java开源项目JOONE实现人工智能编程
http://www.robotsky.com/ZhiN/MoS/2011-08-25/13142461416649.html 用Java开源项目JOONE实现人工智能编程 https://sourc ...
- 3月份GitHub上最热门的Java开源项目
今天,我们来盘点3月份GitHub上最热门的Java项目的时候了,如果你每月都有关注猿妹发布的排行榜,那么本月的Java项目对你来说一定不陌生,这些都是曾经多次出现在榜单中的项目: 1 advance ...
- Android开源项目SlidingMenu本学习笔记(两)
我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...
- 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!
Awsome Java Great Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序 ...
- 阿里巴巴的26款Java开源项目
阿里巴巴的26款Java开源项目 开源展示了人类共同协作,成果分享的魅力.没有任何一家网络公司可以不使用开源技术,仅靠自身技术发展起来.“取之于开源,用之于开源,才能促进开源的良性发展”,阿里巴巴各个 ...
- java开源项目
原文地址:http://blog.longjiazuo.com/archives/2625 1.整理出一些使用比较广或者个人觉得比较好的java开源项目和资料供参考.2.如果你觉得好但是我没有列出的开 ...
- 硬核! Github上 ,star超高的Java 开源项目分享给你!
Awsome JavaGreat Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序员 ...
- 网上下载的 java开源项目 如何 打jar包
目前很多java开源项目(例如qlexpress)只提供了源码,没有提供jar,下面提供maven打jar包的方法. 1.进入qlexpress下载后源代码所在的目录,此目录应包含pom.xml,如下 ...
随机推荐
- Tomcat的安装与配置
Windows安装Tomcat与启动 安装版安装 安装版长这个样子,下载到电脑上后双击开始安装 双击后出现如下页面,点击 Next> 之后是这个页面,点击 I Agree 之后出现如下页面,点击 ...
- font-spider利器对webfont网页字体压缩使用
http://font-spider.org/ npm install font-spider -g hyheilizhitij(汉仪黑荔枝体简) //引入 @font-face{ font-fami ...
- bootstrap 栅格系统 HTTP协议 软件架构 B/S C/S 常见的WEB服务器
Day32 bootstrap Bootstrap就是响应式布局最成功的实现,为了兼容不同的浏览器采用jQuery,为了适配不同的终端采用CSS3 Media Query (媒体查询) 1.1.1 栅 ...
- Node.js 逐行读取
逐行读取 稳定性: 2 - 不稳定 使用 require('readline'),可以使用这个模块.逐行读取(Readline)可以逐行读取流(比如process.stdin) 一旦你开启了这个模块, ...
- Docker 自定义网桥
除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器. 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥. 如果服务已经运行, ...
- Template基础
模板系统的介绍 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
- React Native 项目实战-Tamic
layout: post title: React Native 项目实战 date: 2016-10-18 15:02:29 +0800 comments: true categories: Rea ...
- MYSQL 索引类型、什么情况下用不上索引、什么情况下不推荐使用索引
mysql explain的使用: http://blog.csdn.net/kaka1121/article/details/53394426 索引类型 在数据库表中,对字段建立索引可以大大提高查询 ...
- java记事本开发
今天我想要分享的是一个用java写的一个记事本程序.我知道现在市面上有各种各样的记事本了,但是我发现有的写的功能不够完善,或者是代码层次结构不够清晰,有的甚至看了之后云里雾里的,有的还不乏了非常明显的 ...
- 剑指Offer——知识点储备-J2EE基础
剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...