1:饿汉
public class SingletonExample {
private static SingletonExample _instance = new SingletonExample();
public static SingletonExample getInstance() {
return _instance;
}
private SingletonExample() {
}
}
2:懒汉
public class SingletonExample {
private static SingletonExample _instance = null;
public static synchronized SingletonExample getInstance() {
if(_instance == null){
_instance = new SingletonExample();
}
return _instance;
}
private SingletonExample() {
}
}
3:懒汉,不安全
public class SingletonExample {
private static SingletonExample _instance = null;
public static SingletonExample getInstance() {
if(_instance == null){
synchronized (SingletonExample.class){
if(_instance == null){
_instance = new SingletonExample();
}
}
}
return _instance;
}
private SingletonExample() {
}
}
4:懒汉,内部类
public class SingletonExample {
private static class SingletonExampleHolder{
private final static SingletonExample _instance = new SingletonExample();
}
public static SingletonExample getInstance() {
return SingletonExampleHolder._instance;
}
private SingletonExample() {
}
}
5:登记式,可继承
public class SingletonExample {
static private HashMap<String, Object> singletonMap = new HashMap<String, Object>();
static {
SingletonExample x = new SingletonExample();
singletonMap.put(x.getClass().getName(), x);
}
protected SingletonExample() {
}
public static SingletonExample getInstance(String name) {
if (name == null) {
name = "*.*.SingletonExample";
}
if (singletonMap.get(name) == null) {
try {
singletonMap.put(name, Class.forName(name).newInstance());
} catch (ClassNotFoundException cnf) {
System.out.println("Couldn't find class " + name);
} catch (InstantiationException ie) {
System.out.println("Couldn't instantiate an object of type "+ name);
} catch (IllegalAccessException ia) {
System.out.println("Couldn't access class " + name);
}
}
return (SingletonExample) (singletonMap.get(name));
}
}
class SingletonChild extends SingletonExample{
public SingletonChild(){}
public static SingletonChild getInstance(){
return (SingletonChild)SingletonExample.getInstance("*.*.SingletonChild");
}
}
分享到:
相关推荐
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制资源的唯一性、...在实际应用中,应根据项目需求来决定采用哪种单例模式。
在多线程环境下,我们需要确保单例实例的创建只发生一次,以上几种方式除了懒汉式(线程不安全)外,都能保证线程安全。对于反序列化测试,由于默认反序列化会生成新实例,需要重写 `readResolve()` 方法来防止这种...
首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final ...
根据给定的信息,本文将详细解释几种常见的单例模式,并通过具体的Java代码示例来阐述每种模式的特点和实现方式。 ### 单例模式简介 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局...
### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...
在 Java 中,单例模式的写法有好几种,主要有懒汉式单例、饿汉式单例、登记式单例等。 懒汉式单例是一种常见的单例模式实现方式,它在第一次调用的时候实例化自己。下面是懒汉式单例的四种写法: 1、基本懒汉式...
在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的详细解释: 1. **饿汉式(静态常量)** 这是最简单的单例实现,它在类加载时就创建了实例,线程安全。 `...
单例模式是设计模式中的一种,它在Java编程中被广泛应用,特别是在需要全局共享资源或者控制实例数量的情况下。单例模式的基本思想是确保一个类在任何情况下都只有一个实例,并提供一个全局访问点来获取这个唯一的...
此外,单例模式还有几种变体,比如静态内部类单例和枚举单例。静态内部类单例利用Java类加载机制保证了线程安全,而枚举单例则是Java中实现单例的最佳方式,因为它天然支持序列化且防止反射攻击。 在代码实现上,...
本文将详细介绍几种常见的单例模式实现方式,并探讨它们在实际开发中的应用和最佳实践。 在实现单例模式时,应注意以下几点: 确保单例类不被继承,可以通过将构造函数设置为私有来实现。 考虑线程安全问题,选择...
以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。 ```java public class Singleton { private static final Singleton...
本篇将深入探讨标题中提及的几种设计模式:Model-View-Controller(MVC)模式、单例模式、代理模式以及工厂模式,尤其是简单工厂模式。 **1. Model-View-Controller (MVC) 模式** MVC模式是一种架构模式,它将应用...
主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免使用反射方法获取多个实列,以及实现了序列化的类如何避免创建...
在Java中,常见的单例模式实现方式有以下几种: 1. 饿汉式(静态常量): 这种实现方式在类加载时就完成了初始化,所以是线程安全的。代码如下: ```java public class Singleton { private static final ...
单例模式的实现方式有很多种,主要分为以下几种: 1. **饿汉单例模式**:在类加载时就完成初始化,因此静态变量`instance`会随着类的加载而被创建。这种方式线程安全,且因为单例在类加载时已经创建,所以不存在多...
在Java中,实现单例模式通常有以下几种方式: 1. **懒汉式(线程不安全)**:实例化发生在getInstance()方法中,但在多线程环境下可能造成多个实例的问题。 2. **懒汉式(线程安全)**:通过synchronized关键字保证...
实现单例模式,Java中有几种常见的方法: 1. 饿汉式(静态常量):这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的。代码如下: ```java public class Singleton { private static final ...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一...每种单例模式都有其适用场景,开发者应根据实际需求选择合适的实现方式。理解并熟练掌握这些单例模式,对于提高代码质量和优化程序性能都大有裨益。
为了解决懒汉式单例模式的性能问题,有几种优化策略: 1. **双检锁/双重校验锁(DCL,即 double-checked locking)** ```java public class Singleton { private volatile static Singleton instance; private ...