首页 > 其他分享 >"单"身贵族爱好者必备:新手也能看懂的单例模式入门指南

"单"身贵族爱好者必备:新手也能看懂的单例模式入门指南

时间:2023-11-08 21:57:48浏览次数:36  
标签:private 实例 static 能看懂 单例 新手 模式 class

大家好,欢迎来到程序视点!

前言

在前面三期里,我们详细讲解了工厂模式下的三种分类:

简单工厂模式(Simple Factory)

工厂方法模式(Factory Method)

抽象工厂模式(Abstract Factory)

其中,简单工厂模式不是我们23中设计模式之气,其他两个设计模式都属于创建型模式的设计方式。

今天,我们要接着讲另一种创建型模式:单例模式

单例模式

单例模式简介

单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例。

这个实例就是其唯一的对象,可以直接访问,不需要在其他地方实例化该类的对象。

注意三点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

关键代码有两点:

  • 私有构造函数
  • 对外暴露获取唯一实例的方法

示例

关于单例模式的创建,我们不得不了解其中的两种方式:懒汉式和饿汉式。

首先来看懒汉式。之所以取这个名称,是因为类的实例并不是一开始就创建好的,而是“懒”到第一次获取的时候才创建。

public class Singleton {
	//构造函数私有化
	private Singleton(){}
	
  //“懒”就懒在这里。可以对比后面的饿汉式。
	private static Singleton singleton = null;
	
	//暴露获取唯一实例的方法
	public static Singleton getSingleton(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}
}

这种方式是最基本的实现方式。但这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。

由于线程安全并不是我们要讲的主要内容,这里就不展开分析了

ps:在我们后面讲多线的时候,会详细分析。敬请期待!

再来看看饿汉式。这和上面的懒汉式不同:它是直接一开始就创建好一个实例化的对象。不会管这个实例会不会立即被使用。

class Singleton2 {
  //私有构造函数
	private Singleton2(){};
  // 太“饿”了,得先new个实例先垫下
	private static Singleton2 singleton2= new Singleton2();
  //暴露获取唯一实例的方法
	public static Singleton2 getSingleton2(){
		return singleton2;
	}
}

这种方式比较常用。同时不用去考虑加锁的问题,执行效率会高些!但有个缺点:类加载时就初始化,浪费内存。

标签:private,实例,static,能看懂,单例,新手,模式,class
From: https://www.cnblogs.com/tanggoahead/p/17818421.html

相关文章

  • kali-Linux高速下载 新手专用
    1打开清华源官网https://mirrors.tuna.tsinghua.edu.cn/ 2、在截图位置输入kali。选择第二个 3、进去后选择下面截图这个 4、选择对应ios或者虚拟机下载。  5、实测试速度很好。(小白专用贴。) ......
  • js给元素添加id,动态方式,举个简单例子
    在JavaScript中,如果你想动态地给一个已经存在的元素添加一个id属性,你可以通过获取那个元素的引用,然后设置它的id属性来实现。这里是一个简单的例子,它展示了如何给一个div元素动态添加一个id://假设我们有一个这样的HTML元素://<div>这是一个div</div> //首先,获取那个要添加i......
  • 单例模式
    单例模式引言 单例设计模式是23种设计模式中最简单、使用最多的设计模式,也是必须掌握的一个设计模式。定义单例模式为系统中的类只允许实例化唯一一个对象这类典型问题提供的解决方案。 许多时候系统只需要拥有一个的全局对象,比如系统中的日历Calendar类就只需要一个......
  • java类是什么,还有继承类,接口是什么意思,超详细!!!新手必看
    在Java语言中,一个类(Class)是一个模板,它定义了一种特定类型的对象的属性和行为。可以把它想象成一张蓝图,它描述了如何构建一个具体的对象,比如一个汽车类可以包含颜色、品牌、速度等属性,以及启动、停止等行为。**继承(Inheritance)**是面向对象编程的一个核心概念,它允许一个类(称为子类......
  • 适合新手学习的360文库采集程序
    今天给大家带来的是一个采集360文库的爬虫程序,非常简洁小巧,适合新手使用,在实际使用时还需要根据自身的需求进行修改,先让我们来一起学习一下吧。```kotlinimportjava.net.URLimportjava.net.HttpURLConnectionimportjava.net.InetSocketAddressimportjava.net.Proxyfunmai......
  • 实验7:单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;2.提交......
  • 小白函数递归------新手
    1.递归是什么?递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。 #include<stdio.h>voidprint(){ printf("hehe"); print();}intmain(){ printf("hehe"); print();}在上面的函数中函数实现了自己调用自己,去实现我们想要去实现的功能,这种就是函数......
  • 设计模式-单例械
    //Seehttps://aka.ms/new-console-templateformoreinformation//设计模式-单例模式//目的:唯一性,内存资源,GCtffu//保证整个系统中一个类只有一个对象的实例usingSystem.Threading.Channels;Singleton.GetInstance().GetGuid();Singleton.GetInstance().GetGuid()......
  • 传奇开服对于新手小白需要知道的事情
    传奇开服对于新手小白需要知道的事情大家好我是艾西,有很长时间没有去做传奇相关的分享了。最近我是遇到不少小伙伴咨询这个事情但是又没有任何头绪,搞的很乱所以就给大家说下传奇开服具体的哪些事情到底怎么弄怎么回事!大部分的小伙伴想做传奇其实无非就是两个点:1想赚米2就是娱乐......
  • 双重校验锁实现对象单例
    uniqueInstance采用volatile关键字修饰也是很有必要的,uniqueInstance=newSingleton();这段代码其实是分为三步执行:为uniqueInstance分配内存空间初始化uniqueInstance将uniqueInstance指向分配的内存地址但是由于JVM具有指令重排的特性,执行顺序有可能变成1->3->2。......