设计模式-单例模式

简介: 单例模式(Singleton Pattern)什么是单例模式一个对象只能有一个实例,所有对象对它的引用都指向同一个内存地址示例代码如下1. 懒汉式加载public class Singleton { // 构造一个私有的构造器 p...

单例模式(Singleton Pattern)

什么是单例模式

一个对象只能有一个实例,所有对象对它的引用都指向同一个内存地址

示例代码如下

1. 懒汉式加载
public class Singleton {

	// 构造一个私有的构造器
	private Singleton(){ }

	// 可以看到这里是自己对自己进行实例化的
	private static final Singleton singleton = new Singleton();

	// 获取对象实例
	public static Singleton getInstance()throws Exception{
		return singleton;
	}
}
2. 饿汉式加载
/**
 * 饿汉式加载
 *
 * 之前的例子里面采用的是懒汉式加载,对象的创建是在程序启动中完成,这种的缺点是资源的浪费,合理的方式应该是在使用的时候去创建,
 * 下面的加载是由外部决定的
 * 
 * Created by Administrator on 2018/1/15 0015.
 */
public  class Singleton2 {

	// 构造一个私有的构造器  
	private Singleton2 (){ }

	private static Singleton2 single;

	// 这里是由外部决定什么时候创建实例  
	public static void init() {
		single= new Singleton2 ();
	}
	
	// 获取对象实例  
	public static Singleton2 getInstance()throws Exception{
		if(single!= null) {
			return single;
		}
		else{
			throw new Exception("类还未创建实例");
		}
	}
}

优点

  • 减少内存开支,因为只有一个对象实例,特别是一个对象频繁的创建和销毁时
  • 减少系统的性能开销,当一个对象的产生需要比较多的资源时
  • 单例模式可以避免对资源的多重占用,比如写文件操作
  • 单例模式可以在系统设置全文访问点,优化和共享资源访问,例如由一个单例类去负责一个数据表的映射处理

缺点

  • 单例模式一般没有接口,扩展比较麻烦,接口对单例模式是没有意义的,它要提供单一实例,而接口和抽象类是不能被实例化的.当然,在特殊情况下也可以实现,
    这个看具体的环境而定
  • 单例模式不利于测试,在并行开发环境中,单例模式没有完成,没法进行测试
  • 单例模式与单一职责原则有冲突.一个类应该只实现一个逻辑,而不关心它是否是单例的

使用场景

  • 要求生成唯一序列号的环境
  • 在整个项目中需要一个共享访问点或共享数据
  • 创建一个对象消耗的资源过多时,比如访问 IO 和数据库
  • 需要定义大量的静态常量和静态方法(这里我其实没太搞懂静态方法和单例的区别在哪)

相关文章
|
3月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
36 2
|
1月前
|
设计模式 存储 前端开发
前端必须掌握的设计模式——单例模式
单例模式是一种简单的创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。适用于窗口对象、登录弹窗等场景,优点包括易于维护、访问和低消耗,但也有安全隐患、可能形成巨石对象及扩展性差等缺点。文中展示了JavaScript和TypeScript的实现方法。
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
31 2
|
2月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
48 4
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
2月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
30 1
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
33 0
|
3月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
3月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy<T>` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
112 1

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    54
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    61
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    47
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137