综述:Singleton即单例模式是指仅仅被实例化一次的类。比如任务管理器、文件管理器、回收站、某些工具类等,这些类在程序中仅仅需要一个实例就足够了,这个时候可以考虑使用单例模式。,以下介绍三种实现单例模式的方法:
1.饿汉式(类加载时创建实例)
/**
* Created by luffy on 9/21/15.
* 方法一实现单例模式:使用静态常量来作为唯一的实例,保证该类只有一个实例
*/
public class Elvis01 {
public static final Elvis01 ELVIS_01 = new Elvis01();
private Elvis01(){
}
public void leaveTheBuilding(){
System.out.println("Elvis01 leaveTheBuilding");
}
}
特点:线程安全,不能防止反射攻击,序列化需要进行额外工作(实现Serializable)
2.饿汉变种(提供静态方法获取实例)
/**
* Created by luffy on 9/21/15.
* 方法二实现单例模式:通过提供静态方法获取该类的实例
*/
public class Elvis02 implements Serializable{
private static final Elvis02 elvis = new Elvis02();
private Elvis02(){
}
public void leaveTheBuilding(){
System.out.println("Elvis02 leaveTheBuilding");
}
public static Elvis02 getInstance(){
return elvis;
}
}
特点:线程安全,不能防止反射攻击,序列化需要进行额外工作(实现Serializable)
3.懒汉式
/**
* Created by luffy on 9/21/15.
* 方法三实现单例模式:懒汉式
*/
public class Elvis04 implements Serializable{
private Elvis04 instance;
private Elvis04(){
}
public Elvis04 getInstance(){
if(instance == null){
instance = new Elvis04();
}
return instance;
}
}
特点:懒汉式,线程不安全,序列化需要进行额外工作(实现Serializable),延时加载
4.枚举类型的单例模式
/**
* Created by luffy on 9/21/15.
* 方法四实现单例模式:使用枚举类型,保证线程安全
*/
public enum Elvis03 implements Serializable{
INSTANCE;
public void leaveTheBuilding(){
System.out.println("Elvis03 leaveTheBuilding");
}
}
特点:绝对防止多次实例化,即使是面对复杂的序列化活着反射攻击的时候。虽然这种方法还没有被广泛采用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
5.静态内部类
/**
* Created by luffy on 9/21/15.
* 方法五实现单例模式:静态内部类
*/
public class Elvis05 implements Serializable{
private Elvis05(){
}
public Elvis05 getInstance(){
return SignletonHolder.instance;
}
private static class SignletonHolder{
private static Elvis05 instance;
}
public void leaveTheBuilding(){
System.out.println("Elvis03 leaveTheBuilding");
}
}
特点:懒加载,线程安全
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
在 Java 中实现 Singleton 属性有两种方式,一种是使用私有构造器强化 Singleton 属性,另一种是使用枚举强化 Singleton 属性。对于第一种方法,可以使用私有构造器来实例化公有的静态 final 域,然后使用静态方法 ...
枚举类型可以有自己的构造器,但只能在枚举声明时使用,并且不能是公有的。这允许在创建枚举实例时进行初始化操作。 ```java public enum Planet { MERCURY(3.303e+23, 2.4397e6), VENUS(4.869e+24, 6.0518e6), ...
Java语言中的构造方法私有化是一种常见的编程技巧,主要用于实现特定的设计模式,如单态模式(Singleton Pattern)。在Java中,私有构造方法是通过将构造函数声明为private来实现的,这使得其他类无法直接实例化该类...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
实现单例时,通常会使用私有构造器防止外部创建实例,同时提供一个静态方法用于获取唯一的实例。Java中常使用双重检查锁定(Double-Check Locking)或枚举方式来实现线程安全的单例。 ```java // 双重检查锁定示例 ...
在本压缩包中,"Java 枚举类型案例"可能包含了多个示例,以帮助我们深入理解Java枚举类型的使用。 1. **枚举的定义** 在Java中,枚举是通过关键字`enum`来定义的。例如,创建一个表示星期的枚举类型: ```java ...
这是最简单的Singleton实现方式,通过静态初始化器在类加载时就创建了Singleton实例。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {}...
Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...
Java枚举是面向对象编程中的一个重要特性,它用于定义固定的常量集合,这些常量通常代表某种特定的数据类型。在Java中,枚举提供了一种更安全、更规范的方式来处理常量,相比于传统的final static变量,枚举具有更多...
当编译器遇到枚举类型时,会自动为每个枚举常量创建一个私有的构造函数,并在类的静态初始化块中创建实例。这些实例存储在静态字段中,确保它们在类加载时创建,因此枚举对象是线程安全的。例如,反编译后的 `Color...
简单的单例模式举例Singleton 分为恶汉式 懒汉式
本文将基于“Java学习总结(2023/03/19)”的主题,深入探讨Java的核心概念、设计模式以及最佳实践,结合《Effective Java》的学习心得,为初学者和进阶者提供一份详尽的指南。 首先,Java语言的基础知识包括语法、...
### Java的Singleton模式详解 #### 一、Singleton模式概述 Singleton模式是一种常用的设计模式,在Java中主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式对于管理共享资源(如数据库连接池、...
Singleton 单例模式是软件设计模式中的一种,它限制了类的实例化过程,确保一个类在整个系统中只有一个实例存在。这种模式常用于系统资源管理,比如数据库连接、线程池或者缓存服务等,因为这些资源往往需要全局共享...
Item 3: Enforce the singleton property with a private constructor or an enum type Item 4: Enforce noninstantiability with a private constructor Item 5: Prefer dependency injection to hardwiring ...
Java中的Singleton(单例模式)是一种常用的软件设计模式,它保证了类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中特别有用,因为它可以节省系统资源,例如数据库连接或者线程池...
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制资源的共享,减少系统开销,以及在多线程环境中避免...
### 最简单的设计模式...通过私有构造函数、静态成员变量和静态工厂方法的组合使用,可以轻松地在Java和C++等语言中实现Singleton模式。同时,在多线程环境下,需要特别注意线程安全问题,采取相应的措施确保单例性。
析构或构造函数声明为保护或私有成员 标题“析构或构造函数声明为保护或私有成员”所对应的知识点主要是关于C++语言中构造函数和析构函数的访问控制。 在C++语言中,构造函数和析构函数可以被声明为私有或保护成员...
#### EJ 第3条:用私有构造器或枚举类型强化Singleton属性 单例模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。Kotlin通过`object`关键字进一步简化了单例模式的实现,使得创建...