返回顶部
首页 > 资讯 > 后端开发 > Python >简单总结单例模式的4种写法
  • 541
分享到

简单总结单例模式的4种写法

2024-04-02 19:04:59 541人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、单例模式二、写法三、饿汉式四、懒汉式五、内部类六、枚举七、结论一、单例模式 属于创建者模式的一种, 单例模式的目的是使该类只有一个实例,同一个类的不同对象有不同的hashCo

一、单例模式

属于创建者模式的一种, 单例模式的目的是使该类只有一个实例,同一个类的不同对象有不同的hashCode()

单例模式是由该类自行创建唯一个向外暴露的全局的对象

二、写法

  • 饿汉式:无线程安全,但是类以加载就会创建实例,浪费资源
  • 懒汉式:存在线程安全,需要加synchroined
  • 内部类:无线程安全(完美方案)
  • 枚举: 线程安全,听说是高效java推荐的写法

三、饿汉式



public class SingleTest{
    public static void main(String[] args) {
        Single single1 = Single.getInstance();
        Single single2 = Single.getInstance();
        System.out.println(single1.hashCode());
        System.out.println(single2.hashCode());
        System.out.println(single1 == single2);
    }
}

class Single {
    final static Single INSTANCE = new Single();
    public static Single getInstance(){return INSTANCE;}
}

在这里插入图片描述

四、懒汉式


//懒汉式的线程安全的写法又称为双检索懒汉模式
public class SingleTest {
    public static void main(String[] args) {
        for(int i = 0;i < 10; i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Single.getInstance().hashCode());
                }
            }).start();
        }
    }
}

class Single{
    private static Single instance = null;
    Single(){}
    public static Single getInstance(){
      if (instance == null){
          synchronized (Single.class) {
              if(instance == null){
                  try{
                     Thread.sleep(1);
                  }catch (Exception e){
                     e.printStackTrace();
                  }
                 instance = new Single();
              }
          }
      }
      return instance;
    }
}

在这里插入图片描述

五、内部类



public class SingleTest {
    public static void main(String[] args) {
        Single single1 = Single.getInstance();
        Single single2 = Single.getInstance();
        System.out.println(single1.hashCode());
        System.out.println(single2.hashCode());
        System.out.println(single1 == single2);
    }
}

class Single{
    private static Single instance;

    public static Single getInstance(){
        return InnerSingle.INSTANCE;
    }

    private static class InnerSingle{
        private final static Single INSTANCE = new Single();
    }
}

在这里插入图片描述

六、枚举


//枚举:完美写法
public class SingleTest {
    public static void main(String[] args) {
        Single single1 = Single.INSTANCE;
        Single single2 = Single.INSTANCE;
        System.out.println(single1.hashCode());
        System.out.println(single2.hashCode());
        System.out.println(single1 == single2);
    }
}

enum Single{
    INSTANCE;
}

在这里插入图片描述

七、结论

优点:

  • 单例模式可以保证内存里只有一个实例,减少了内存的开销。
  • 避免对资源的多重占用
  • 单例模式设置全局访问点,可以优化和共享资源的访问。

缺点:

  • 没有接口,扩展不了代码,违背了开闭原则
  • 单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。

到此这篇关于简单总结单例模式的4种写法的文章就介绍到这了,更多相关单例模式的4种写法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 简单总结单例模式的4种写法

本文链接: https://lsjlt.com/news/127842.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 简单总结单例模式的4种写法
    目录一、单例模式二、写法三、饿汉式四、懒汉式五、内部类六、枚举七、结论一、单例模式 属于创建者模式的一种, 单例模式的目的是使该类只有一个实例,同一个类的不同对象有不同的hashCo...
    99+
    2024-04-02
  • Python实现单例模式的五种写法总结
    目录使用模块使用装饰器基于 __new__ 方法实现基于 metaclass 方式实现单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保...
    99+
    2024-04-02
  • Java中单例模式的七种写法示例
    目录前言1、饿汉式(线程安全)⭐2、懒汉式(线程不安全)⭐ 3、懒汉式(加锁)4、懒汉式(双重校验锁)⭐5、单例模式(静态内部类)6、单例模...
    99+
    2024-04-02
  • Java单例模式的几种常见写法
    目录1.饿汉模式2.懒汉模式3.静态内部类4.枚举总结1.饿汉模式 饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 Class...
    99+
    2024-04-02
  • C#实现单例模式的6种方法小结
    目录介绍Version 1 - 非线程安全Version 2 - 简单的线程安全Version 3 - Double-check locking的线程安全Version 4 - 不完...
    99+
    2024-04-02
  • Java单例模式简单介绍
    一、概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,...
    99+
    2023-05-31
    java 单例模式 ava
  • CSS常用样式简单的总结
    本篇内容介绍了“CSS常用样式简单的总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Kotlin的5种单例模式
    前言 最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下: 饿汉式 懒汉式 线程安全的懒汉式 双重校验锁式 静态内部类式...
    99+
    2023-09-16
    单例模式 kotlin java Powered by 金山文档
  • java设计模式中的单例模式简单介绍
    这篇文章主要介绍“java设计模式中的单例模式简单介绍”,在日常操作中,相信很多人在java设计模式中的单例模式简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java设计模式中的单例模式简单介绍”的疑...
    99+
    2023-06-02
  • 总结几种简单的Javascript判断语句
    Javascript 是一种流行的脚本语言,用于在网页中添加交互性和动态效果。在编写 Javascript 程序时,经常需要进行条件判断,以根据不同情况执行不同的操作。本文将介绍几种简单的 Javascript 判断语句,以便在编写程序时实...
    99+
    2023-05-14
  • JS实现单例模式的6种方案汇总
    前言 今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6(C...
    99+
    2024-04-02
  • Python实现单例模式的5种方法
    目录基本介绍优缺点Python实现方式1,元类实现:方式2,继承实现:方式3,装饰器实现:方式4,模块实现:方式5,@classmethod实现单例模式:基本介绍 一个对象只允许被一次创建,一个类只能创建一个对象,...
    99+
    2022-06-02
    Python 单例模式
  • Java单例模式怎么写
    本篇内容主要讲解“Java单例模式怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java单例模式怎么写”吧!这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的...
    99+
    2023-06-19
  • java中单例模式的写法有哪些
    小编给大家分享一下java中单例模式的写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单例模式属于创建者模式的一种, 单例模式的目的是使该类只有一个实...
    99+
    2023-06-15
  • Android按钮单击事件的四种常用写法总结
    很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对...
    99+
    2022-06-06
    事件 Android
  • Java设计模式之单例模式简介
    目录一、饿汉式(静态常量)二、饿汉式(静态代码块)三、懒汉式(线程不安全)四、懒汉式(线程安全,同步方法)五、懒汉式(线程不安全,同步代码块)六、双重检查( DCL )七、静态内部类...
    99+
    2024-04-02
  • python 中各种简单的代码写法
    该篇博客主要记录python中各种简单的代码的写法,持续更新: 1.lambda: 它主要是简化函数的定义。在一般情况下我们定义一个函数通常是: def test(x): return x+1 而是用lambda可以简化为: ...
    99+
    2023-01-31
    写法 代码 简单
  • JavaScript实现sleep睡眠函数的几种简单方法总结
    目录一.什么是sleep函数?二.为什么使用sleep?三.实现sleep基于Date实现基于Promise的sleep基于Generator函数的sleep基于async函数的sl...
    99+
    2023-01-05
    实现一个sleep函数 js的sleep函数 sleep函数用法
  • Java单例模式的常见写法有哪些
    这篇文章主要介绍“Java单例模式的常见写法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单例模式的常见写法有哪些”文章能帮助大家解决问题。1.饿汉模式饿汉模式也叫预加载模式,它是在类...
    99+
    2023-06-30
  • NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
    本文实例讲述了NodeJS设计模式。分享给大家供大家参考,具体如下: 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直接返回,若不存在,则创建实例对...
    99+
    2022-06-04
    模式 观察者 适配器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作