IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 5.单例模式 -> 正文阅读

[Java知识库]5.单例模式

5. 单例模式

5.1 类图

在这里插入图片描述

5.2 代码

Singleton:

public class Singleton {
	private static Singleton singleton;
	private Singleton(){

	}
	public static Singleton getSingleton(){
		if(singleton==null){
			singleton =  new Singleton();
			return singleton;
		}
		else{
			return singleton;
		}
	}
}

Client:

public class Client {
	public static void main(String[] args) {
		Singleton singleton = Singleton.getSingleton();
		Singleton singleton1 = Singleton.getSingleton();
		if(singleton==singleton1){
			System.out.println("singleton == singleton1");
			System.out.println("是单例模式");
		}
		else{
			System.out.println("不是单例模式");
		}
	}
}

5.3 模式特点

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类成为单例类,他提供全局的访问方法。

要点:

  • 某个类只能有一个实例
  • 这个类必须自行创建这个实例
  • 他必须向整个系统提供这个实例

单例类拥有一个私有的构造函数,确保用户无法通过new关键字直接实例化,除此之外,该模式中包含一个静态私有成员变量和静态公有的工厂方法,该工厂方法负责检验实例的存在并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。

优点:

  • 提供了对唯一实例的受控访问
  • 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁得到对象单例模式无疑可以提供系统的性能。
  • 允许可变数目的实例。

缺点:

  • 实例模式中没有后抽象层,因此单例类的扩展有很大的困难。
  • 单例类的职责过重,在一定程度上违背了“单一职责原则”。
  • 滥用单例类会带来一些负面问题,如为了节省资源将数据库连接对象设计为单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出。

5.4 适用场景

  • 系统只需要一个实例对象
  • 客户调用类的单个实例只允许适用一个公共的访问点,除了改访问点之外,不能通过其他途径访问该实例。

需要注意的事项:

  • 不要适用单例模式存取全局变量,这违背了单例模式的初衷。
  • 不要将数据库连接对象做成单例,因为一个系统可能会与多个数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。

5.5 模式应用

  1. Java语言类库JDK中就有很多单例模式的应用实例。在每一个Java应用程序中,都有唯一一个Runtime对象。
    放连接。

5.5 模式应用

  1. Java语言类库JDK中就有很多单例模式的应用实例。在每一个Java应用程序中,都有唯一一个Runtime对象。
  2. 在流行的Spring框架中,当我们试图从Spring容器中获取某个类的实例的时候,默认情况下,Spring会通过单例模式进行创建,也就是在Spring的bean工厂中这个bean的实例只有一个。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 12:54:30  更:2021-12-03 12:56:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:32:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码