原文:https://blog.csdn.net/dmk877/article/details/50311791
参考文章:
https://www.jianshu.com/p/61b67ca754a3
设计模式就是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
设计模式分为3种类型,共23种。
创建型模式: 单例模式 ,抽象工厂模式, 建造者模式 , 工厂模式, 原型模式
结构型模式: 适配器模式, 桥接模式 ,装饰模式 ,组合模式,外观模式 ,享元模式, 代理模式。
行为型模式:模板方式模式, 命令模式, 迭代器模式, 观察者模式 ,中介者模式 ,备忘录模式,解释器模式,状态模式,
策略模式,职责链模式 访问者模式。
这篇文章围绕单例模式展开。
1.为什么使用单例模式?
单例模式主要是为了因为创建了多个实例而造成资源的浪费,且多个实例由于多次调用容易出现出现结果错误的问题。
优点:使用单例模式 能够保证整个应用程序中有且只有一个实例。
2.单例模式的设计思想
整个单例模式的核心关键就是需要保证在应用中只有一个对象。主要三步走。
1.不允许其他程序用new对象(私有化该类的构造函数)
2.在该类中创建对象(通过new 在本类中创建一个本类对象)
3.对外提供一个可以让其他程序获取该对象的方法(定义一个公共的方法将在该类中所创建的对象返回)
3.单例模式的写法
单例模式的写法大概分为五种, 饿汉式 懒汉式 双重检验锁 静态内部类 枚举
3.1 懒汉式[线程不安全]
解释:这种方式是在调用getInstance 方法的时候才创建对象的 比较懒 因此被称为懒汉式。
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 饿汉式
可以看出饿汉式,直接在类加载的时候就完成了实例化,比较简单,避免线程同步的问题。
访问这个类的方式。
3.3 单例模式懒汉式双重校验锁[推荐用]
下面这种方法保证了 懒加载 和 线程安全
调用方式:
3.4 内部类
3.5 枚举类
//调用枚举这个类
SingletonEnum.instance.method();
总结:
一般情况下推荐使用 3.2 饿汉式, 双重检验锁,枚举 和 内部类。
整篇文章就写到这,小编 对这块了解的不是很深,如果讲的不对的地方欢迎指出。