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