JAVA设计模式之:单例模式

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

/**
* 单例模式之懒汉模式:
* @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是同一个对象”);
}
}
}
控制台打印结果如下:

从打印结果可以看出,两种模式创建的多个对象都分别对应同一个对象。
最后我们对懒汉模式和饥饿模式作个比较:
懒汉模式:加载类时速度比较快(加载类时并不实例化对象),但运行时获取对象的速度就相对比较慢,而且是线程不安全的。
饥饿模式:加载类时速度比较慢(加载类时要实例化对象),但运行时获取对象的速度就相对比较快,是线程安全的。

你可能感兴趣的:(java,java设计模式)