Java设计模式之单例模式

  设计模式:就是根据问题和需求,在大量实践中总结和理论化之后优选的代码结构,编程风格以解决问题的方式。
  单列模式:在设计一个类时,该类的实例在整个程序中只有一个实例对象。列如:世界上只有一个月亮。
1、饿汉模式:

public class SinglePattern {
    /*
     * 1,类的构造方法私有化,不能通过new关键字创建实例
     * 2,类的内部创建一个该类的实例,使用静态变量引用该对象
     * 3,定义一个静态方法返回该实例对象
     * */
    //私有构造方法
    private SinglePattern() {}
    //创建该类的实例对象
    private static SinglePattern single = new SinglePattern();
    //公开的静态方法,返回该类实例
    public static SinglePattern getSingleP() {
        return single;
    }
}

2、懒汉模式:

public class SinglePattern {
    //私有构造方法
    private SinglePattern() {}
    //创建该类的实例对象
    private static SinglePattern single = null;
    //公开的静态方法,返回该类实例
    public static SinglePattern getSingleP() {
        if (single == null){
            single = new SinglePattern();
        }
        return single;
    }
}

懒汉单例模式是线程不安全的,多线程情况下有可能存在多个实例,可以通过synchronized关键字来达到线程安全。
1、在getSingleP()方法上加synchronized 关键字

public class SinglePattern {
    //私有构造方法
    private SinglePattern() {}
    //创建该类的实例对象
    private static SinglePattern single = null;
    //公开的静态方法,返回该类实例
    public static synchronized SinglePattern getSingleP() {
        if (single == null){
            single = new SinglePattern();
        }
        return single;
    }
}

2、通过同步代码块解决

public class SinglePattern {
    //私有构造方法
    private SinglePattern() {
    }
    //创建该类的实例对象
    private static SinglePattern single = null;
    //公开的静态方法,返回该类实例
    public static SinglePattern getSingleP() {
        if (single == null){
            synchronized (SinglePattern.class){
                single = new SinglePattern();
            }
        }
        return single;
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页