栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java设计模式-创建型设计模式-单例模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java设计模式-创建型设计模式-单例模式

Java设计模式-创建型设计模式-单例模式

从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》

其他文章:

Java设计模式-UML类图Java设计模式-七大架构设计原则-开闭原则
Java设计模式-七大架构设计原则-依赖倒置原则Java设计模式-七大架构设计原则-单一职责原则
Java设计模式-七大架构设计原则-接口隔离原则Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则Java设计模式-创建型设计模式-简单工厂模式
Java设计模式-创建型设计模式-工厂方法模式(工厂模式)Java设计模式-创建型设计模式-抽象工厂模式
Java设计模式-创建型设计模式-建造者模式Java设计模式-创建型设计模式-原型模式
Java设计模式-创建型设计模式-单例模式Java设计模式-结构型设计模式-适配器模式

文章目录
  • Java设计模式-创建型设计模式-单例模式
    • 一、单例模式
      • 1.单例模式定义
          • 单例设计模式主要解决的是类的频繁创建与销毁问题,通过控制类实例的创建来节省系统资源。
      • 2.单例模式的代码实现

一、单例模式 1.单例模式定义

1.单例模式(Singleton Pattern):确保某一个类最多只有一个实例,并向整个系统提供这个实例,即该类需提供一个访问唯一实例的全局方法,这个类称为单例类。单例模式的目的是使得某个类最多只有一个实例。

2.为了确保单例类最多只有一个实例,且能够向外部提供唯一实例,单例类应具备以下特点特征:

(1)构造方法私有化;

(2)能够生成唯一实例;

(3)存在能够向外部提供唯一实例的方法;

(4)实例和方法需用static关键词修饰。

3.单例模式确保了系统中只能存在唯一实例,则在内存里只有一个实例,这样在频繁的创建和销毁实例时可以减少内存的开销。但由于单例类只向外部提供了访问实例的方法、没有接口,无法被重用和扩展。

4.在GoF23种设计模式中属于创建型设计模式:

​ 其中包括:简单工厂模式(不在GoF23种设计模式中)、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。

单例设计模式主要解决的是类的频繁创建与销毁问题,通过控制类实例的创建来节省系统资源。 2.单例模式的代码实现

怎么写饿汉式?

public class Singleton1{

    private static Singleton1 singleton1 =new Singleton1();

    private Singleton1() {
        //避免通过反射来创建对象
       if(singleton1!=null){
           throw new RuntimeException("单例对象不能重复创建");
       }
            
    }

    public static Singleton1 getInstance() {
        return singleton1;
    }
}

怎么写懒汉式?

双检锁/双重校验锁(DCL,即 Double-Checked-Locking)

public class Singleton2  {
    //加上了volatile后,多线程访问下会给加上volatile变量赋值语句之后加上一个内存屏障
    //让JVM禁止内存重排,保证构造方法赋值操作不能在static对象之后 越过这个内存屏障
    private static volatile Singleton2 singleton2 = null;

    private Singleton2() {

    }
    public static Singleton2 getInstance() {
        //当对象创建出来以后,只需要判断对象是否有值,如果有了就直接返回不需要进入了
        if (singleton2 == null) {
            synchronized (Singleton2.class) {
                //如果没有这个判断,两个线程都会创建对象,并且后进来的线程创建的对象会覆盖掉前面的对象
                if (singleton2 == null) {
                    singleton2 = new Singleton2();
                }
            }
        }
        return singleton2;
    }
}

jdk中的单例模式有哪些?

Runtime类,比如说我们调用System里面的exit() ,调用的就是Runtime类中的exit()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/843208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号