您的位置:首页 > 编程语言 > Java开发

JAVA设计模式之:单例模式

2015-12-14 12:00 459 查看
在我们的项目中,有的对象我们有且只需要一个就可以了,如项目配置文件,操作数据库,操作文件等的工具类,线程池,缓存文件操作等。此时,我们就可以应用单例模式实现这些需求。单例模式分为两种 ,一种是我们俗称的饿汉模式,一种是我们俗称的懒汉模式。
首先我们看懒汉模式的实现方式:


/**

* 单例模式之懒汉模式:

* @description:

*/

public class LazierPattern {

/* 第一步:我们需要把构造方法私有化,让其它类不能用new的方式来创建此对象* */

private LazierPattern() {

}

/* 第二步:在类中创建本类的实例对象* */
private static LazierPattern instance;//此处并没有实例化

/* 第三步:提供其它类(外界)获取本类实例的公用方法,使用了public static修饰* */
public static LazierPattern getInstance() {
//对当前对象做判断,如果不存在就创建对象,存在则直接返回对象
if(null==instance){//在要用的时候才实例对象,所以我们俗称懒汉模式
instance=new LazierPattern();
}
return instance;
}


}

再看下饥饿模式的实现类:

/**

* 单例模式之饿汉模式:

* @description:

*/

public class HungeryPattern {

/* 第一步:我们需要把构造方法私有化,让其它类不能用new的方式来创建此对象* */

private HungeryPattern() {

}

/* 第二步:在类中创建本类的实例对象* */
private static HungeryPattern instance = new HungeryPattern();//实例对象用static修饰,在加载类的时候就会实例出来

/* 第三步:提供其它类(外界)获取本类实例的公用方法,使用了public static修饰* */
public static HungeryPattern getInstance() {
return instance;
}


}

我们用一个测试类Test来测试我们的实例结果:

public class Test {

public static void main(String[] args) {

/* 测试饿汉模式* */

HungeryPattern lazy01 = HungeryPattern.getInstance();

HungeryPattern lazy02 = HungeryPattern.getInstance();

if (lazy01 == lazy02) {

System.out.println(“lazy01与lazy02是同一个对象”);

}

System.out.println(“———-分隔线—————-“);

/* 懒汉模式测试* */

LazierPattern hunger01 = LazierPattern.getInstance();

LazierPattern hunger02 = LazierPattern.getInstance();

if (hunger01 == hunger02) {

System.out.println(“hunger01与hunger01是同一个对象”);

}

}

}

控制台打印结果如下:



从打印结果可以看出,两种模式创建的多个对象都分别对应同一个对象。

最后我们对懒汉模式和饥饿模式作个比较:

懒汉模式:加载类时速度比较快(加载类时并不实例化对象),但运行时获取对象的速度就相对比较慢,而且是线程不安全的。

饥饿模式:加载类时速度比较慢(加载类时要实例化对象),但运行时获取对象的速度就相对比较快,是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: