23种设计模式-单例模式(创建型)

 

目录

学习知识,对知识源头的了解很重要!

1.什么是设计模式?

 2.OOP七大原则(重要,为后续写代码提供参考,规范)

3.单例设计模式

3.1 饿汉式

3.2 懒汉式

3.3 线程安全的懒汉式

 3.4 双检查锁机制

4.常见应用场景:


1.什么是设计模式?

设计模式,是前辈们代码开发经验总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码可复用性可维护性可读性稳健性以及安全性的解决方案! (这里也可以理解为武功招式) 

23种设计模式-单例模式(创建型)_第1张图片

1995年,GoF(Gang of Four,四人组) 合作出版了<<设计模式:可复用面向对象软件的基础>>一书,

共收录了23种设计模式,从此树立了软件设计模式领域的里程碑;

 2.OOP七大原则(重要,为后续写代码提供参考,规范)

1.开闭原则:

对扩展开发,对修改关闭;

2.里氏替换原则:

继承必须确保超类所拥有的性质在子类中仍然成立;

3.依赖倒置原则:

耦合于抽象,不偶合于具体;

4.单一职责原则:

控制类的粒度大小、将对象解耦、提高其内聚性;

5.接口隔离原则:

要为各个类建立它们需要的专用接口;

6.迪米特法则:

只与你的直接朋友交谈,不跟"陌生人"说话;

7.合成复用原则:

尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现;

 

了解了这些,咱们赶紧热热身吧!

3.单例设计模式

 简介:单例模式的核心思想是,在程序运行以后,此类的对象在内存中只允许存在一份;

 单例模式分为:懒汉式(可以使它变成线程安全的)、饿汉式(自身是线程安全的)

下面具体说明,实现步骤:

3.1 饿汉式

public class Singleton {

    //1.创建静态变量,并赋值,上来直接new; 这时在类加载时就会将此对象加载进内存;
    private static Singleton singleton = new Singleton();

    //2.私有构造器,不让外界再去new
    private Singleton(){}

    //3.对外界提供一个静态方法获取Singleton对象  
    public static Singleton getSingleton(){
        
        //4.此时返回的都是同一个Singleton对象;
        return singleton;
    }
}

3.2 懒汉式

public class Singleton {
    //1.创建静态变量,并赋值,上来先赋值为null;
    private static Singleton singleton = null;

    //2.私有构造器,不让外界再去new
    private Singleton(){}

    //3.对外界提供一个静态方法获取Singleton对象
    public static Singleton getSingleton(){

        //3.1 判断此静态变量有没有赋值;
       if(singleton==null){
           //3.2 没有赋值,再去new ; 这是懒汉式的核心
           singleton = new Singleton();
       }
        //3.3 返回给调用者;
        return singleton ;
    }
}

3.3 线程安全的懒汉式

public class Singleton {
    //1.创建静态变量,并赋值,上来先赋值为null;
    private static Singleton singleton = null;

    //2.私有构造器,不让外界再去new
    private Singleton(){}

    //3.对外界提供一个静态方法获取Singleton对象
    public  static Singleton getSingleton() {

        //3.1先用同步代码块,上把锁,监视器(锁)就是当前类对象; 这是线程安全的懒汉式核心
        synchronized (Singleton.class) {
            //3.1 判断此静态变量有没有赋值;
            if (singleton == null) {
                //3.2 没有赋值,再去new ; 这是懒汉式的核心
                singleton = new Singleton();
            }
            //3.3 返回给调用者;
            return singleton;
        }
    }
}

 3.4 双检查锁机制

public class Singleton {
    //1.创建静态变量,并赋值,上来先赋值为null;
    private static Singleton singleton = null;

    //2.私有构造器,不让外界再去new
    private Singleton(){}

    //3.对外界提供一个静态方法获取Singleton对象
    public  static Singleton getSingleton() {
        //3.1先判断singleton有没有赋值,如果有值,直接返回此对象,第一次校验; 
        //优点:避免了线程阻塞,效率提升;
        if(singleton==null){
            //3.2 如果没有赋值,先用同步代码块,上把锁,监视器(锁)就是当前类对象; 这是线程安全的懒汉式核心
            synchronized (Singleton.class) {
                //3.3 判断此静态变量有没有赋值,第二次校验;
                if (singleton == null) {
                    //3.4 没有赋值,再去new ; 这是懒汉式的核心
                    singleton = new Singleton();
                }
                //3.3 返回给调用者;
                return singleton;
            }
        }
        return singleton;
    }
}

4.常见应用场景:

1.Windows的任务管理器;

2.Windows的回收站;

3.数据库连接池的设计,一般也是单例模式;

4.在Servlet编程中,每个Servlet也是单例的;

5.在Spring中,每个Bean默认就是单例的;

       

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