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

 

目录

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

1.什么是设计模式?

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

3.单例设计模式

3.1 饿汉式

3.2 懒汉式

3.3 线程安全的懒汉式

 3.4 双检查锁机制

4.常见应用场景:


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默认就是单例的;

       

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值