所谓单例模式,就是指一个类只能实现一个实例,并且提供方法访问获取该实例。单例模式有几种常见的实现方式。
1.简单模式,没有实现延迟加载
public class Singleton{
private Singleton(){}
private Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
2.内部静态类方式
public class Singleton{
private static class SingletonHolder{
private final static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
通过静态内部类实现延迟加载
3.同步代码方式
public class Singleton {
private static Singleton instance = null;
private Singleton(){
//init
}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
private static volatile Singleton instance1;
public static Singleton getInstance1(){
if(instance1 == null){
synchronized (instance1) {
if(instance1 == null){
instance1 = new Singleton();
}
}
}
return instance1;
}
}
synchronized同步方法比较耗性能,因此可以采用预判断+synchronized代码块的方式实现,volatile关键字可以保存内存的可见一致性。
4.枚举
public enum EnumSingleton {
INSTNCE;
private EnumSingleton(){
}
private String name;
public String getName(){
return null;
}
}
使用枚举模式可以避免实例进行通过序列化后反序列化再生成一个实例。
分享到:
相关推荐
以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final Singleton...
以上就是Java中实现单例模式的常见方法,每种方式都有其适用场景和优缺点。在实际开发中,我们需要根据项目需求选择合适的方式实现单例。同时,理解单例模式背后的原理和应用场景,有助于提升代码的设计质量。
以下是一个简单的C#单例模式实现计数器的例子: ```csharp public sealed class Counter { private static readonly Counter _instance = new Counter(); private int _count; // 私有构造函数 private ...
线程安全的单例模式实现可以基于静态局部变量和`std::call_once`。以下是一个简单的示例: ```cpp #include class Singleton { private: Singleton() {} // 私有构造函数 static std::once_flag init_flag; ...
在单例模式中,类的构造函数是私有的,防止外部直接创建对象,而是通过静态方法获取该类的唯一实例。单例模式的唯一性通常是在进程范围内,即在同一个进程中,无论何时调用单例类的获取实例方法,都会返回相同的对象...
java单例模式的多种实现方法及优劣区分,以及如何摧毁单例模式。能够让大家认识到单例的多种多样
这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看
Java单例模式及实现 Java单例模式是一种常见的设计模式,确保某一个类只有一个实例,而且向这个系统提供这个实例。单例模式可以分为三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式的要点 1. 某个类只能有...
- PHP单例模式实现的核心是控制构造函数的访问权限,使其私有(private),防止外部直接实例化。 - 定义一个私有的静态成员变量`$_instance`来存储类的实例。 - 提供一个公共的静态方法`getInstance()`,在第一次...
在给定的内容中提到的`Martin`类就是一个典型的单例模式实现案例。它通过将构造器私有化以及提供一个静态成员变量来确保了`Martin`类的唯一实例的存在。 ```java public class Martin { private Martin() { // ...
**代码**文件则提供了实际的Java实现,通过查看这些代码,我们可以看到单例模式和工厂模式如何在实践中被运用,包括类的定义、方法的实现以及如何通过代码调用来创建和管理对象。 总的来说,这个项目为学习和理解...
单例对象的创建可以在静态初始化块中完成,或者在getInstance方法中通过DCL模式实现。 在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析...
以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...
在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...
### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...
一个用C#写的 实现单例模式的源码程序和大家分享交流一下
以下将详细介绍Java中实现单例模式的五种方法。 1. 饿汉式(静态常量) 这是最简单的单例实现方式,它在类加载时就完成了初始化,所以是线程安全的。饿汉式的优点是实现简单且线程安全,但缺点是如果单例对象长时间...
总之,这个C++实现的单例模式日志类结合了多种高级特性,包括多线程支持、日志等级控制、毫秒级时间戳和灵活的参数及格式化输出。这样的设计对于任何需要记录系统事件或调试的项目都是一个强大的工具。
下面将详细介绍七种常见的单例模式实现方式,并结合多线程环境和反序列化测试进行讨论。 1. **饿汉式单例**: 这是最简单的单例实现,它在类加载时就创建了实例,因此是线程安全的。 ```java public class ...