Java设计模式-单例模式

        单例模式分为饿汉模式和懒汉模式。

1.饿汉模式:

/**
 * @author suwan
 * 单例模式中的饿汉模式
 * @date 2019/12/11
 */
public class Singleton {
    //将构造方法私有化,不允许外部直接创建对象

    private Singleton() {
    }
    //创建类的唯一实例,使用private static变成私有静态成员变量。(用static修饰外部调用时直接使用类名调用)

   private static Singleton singleton=new Singleton();

    //提供一个获取实例的方法,使用public static修饰
    public static  Singleton getSingleton(){
        return singleton;
    }
}
/**
 * @author suwan
 * @date 2019/12/11
 */
public class SingletonTest {
    public static void main(String[] args){
        Singleton singleton1= Singleton.getSingleton();
        Singleton singleton2= Singleton.getSingleton();
        if (singleton1==singleton2){
            System.out.println("singleton1和singleton2是同一实例");
        }else {
            System.out.println("singleton1和singleton2不是同一实例");
        }
    }
}
输出:
singleton1和singleton2是同一实例

 

2.懒汉模式:

/**
 * @author suwan
 * 单例模式中的懒汉模式
 * @date 2019/12/11
 */
public class Singleton2 {
    //将构造方法私有化,不允许外部直接创建对象
    private Singleton2() {
    }

    //声明类的唯一实例,使用private static。
   private static Singleton2 singleton2;

    //提供一个获取实例的方法,使用public static修饰
    public static Singleton2 getSingleton2(){
        if (singleton2==null){
            singleton2=new Singleton2();
        }
        return singleton2;
    }
}
/**
 * @author suwan
 * @date 2019/12/11
 */
public class Singleton2Test {
    public static void main(String[] args){
        Singleton2 singleton1= Singleton2.getSingleton();
        Singleton2 singleton2= Singleton2.getSingleton();
        if (singleton1==singleton2){
            System.out.println("singleton1和singleton2是同一实例");
        }else {
            System.out.println("singleton1和singleton2不是同一实例");
        }
    }
}
输出:
singleton1和singleton2是同一实例

总结:懒汉模式只声明,到用到的时候就会new。饿汉模式的singleton

posted @ 2019-12-11 15:19  passerby-  阅读(151)  评论(0编辑  收藏  举报