简洁易懂的“讲”设计模式中的单例模式(Singleton)

原文:https://blog.csdn.net/dmk877/article/details/50311791 

参考文章:

https://www.jianshu.com/p/61b67ca754a3

https://www.jianshu.com/p/3bfd916f2bb2

https://blog.csdn.net/dmk877/article/details/50311791

设计模式就是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

设计模式分为3种类型,共23种。

创建型模式: 单例模式 ,抽象工厂模式,  建造者模式 , 工厂模式, 原型模式

结构型模式: 适配器模式, 桥接模式 ,装饰模式 ,组合模式,外观模式 ,享元模式, 代理模式。

行为型模式:模板方式模式, 命令模式, 迭代器模式, 观察者模式 ,中介者模式 ,备忘录模式,解释器模式,状态模式,

                      策略模式,职责链模式 访问者模式。

这篇文章围绕单例模式展开。

1.为什么使用单例模式?

单例模式主要是为了因为创建了多个实例而造成资源的浪费,且多个实例由于多次调用容易出现出现结果错误的问题。

优点:使用单例模式 能够保证整个应用程序中有且只有一个实例。

2.单例模式的设计思想

整个单例模式的核心关键就是需要保证在应用中只有一个对象。主要三步走。

1.不允许其他程序用new对象(私有化该类的构造函数)

2.在该类中创建对象(通过new 在本类中创建一个本类对象)

3.对外提供一个可以让其他程序获取该对象的方法(定义一个公共的方法将在该类中所创建的对象返回)

3.单例模式的写法

单例模式的写法大概分为五种, 饿汉式 懒汉式 双重检验锁 静态内部类  枚举

 3.1 懒汉式[线程不安全]

解释:这种方式是在调用getInstance 方法的时候才创建对象的 比较懒 因此被称为懒汉式。

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第1张图片

package com.example.demo.singleton;

/**
 * @Author tanghh
 * @Date 2020/6/17 15:31
 */
public class TestSingleton {
    public static void main(String[]args){
     //调用SingleTon这个类
     Singleton1 singleton1 = Singleton1.getInstance();
    }
}

 

3.2 饿汉式

可以看出饿汉式,直接在类加载的时候就完成了实例化,比较简单,避免线程同步的问题。

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第2张图片

访问这个类的方式。

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第3张图片

3.3 单例模式懒汉式双重校验锁[推荐用]

下面这种方法保证了 懒加载 和 线程安全

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第4张图片

调用方式:

3.4 内部类

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第5张图片

3.5 枚举类

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第6张图片

 

//调用枚举这个类
 SingletonEnum.instance.method();

 

 总结:

一般情况下推荐使用 3.2 饿汉式,  双重检验锁,枚举 和 内部类。

整篇文章就写到这,小编 对这块了解的不是很深,如果讲的不对的地方欢迎指出。

简洁易懂的“讲”设计模式中的单例模式(Singleton)_第7张图片

你可能感兴趣的:(#,基础)