package cn.singleton;
import java.util.HashMap;
import java.util.Map;
/**
* 单例模式实现
* @author 姚伟楠
*
*/
public class Singleton {
/**
* 测试入口
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Object obj1=Object.getInstance();
Object obj2=Object.getInstance();
System.out.print("懒汉式:");
System.out.println(obj1==obj2);
Object1 obj3=Object1.getInstance();
Object1 obj4=Object1.getInstance();
System.out.print("饿汉式:");
System.out.println(obj3==obj4);
Object2 obj5=Object2.getInstance(Object2.class.getName());
Object2 obj6=Object2.getInstance(Object2.class.getName());
System.out.print("登记式:");
System.out.println(obj5==obj6);
}
}
/**
* 懒汉式单例(需要时候才实例化)
* @author 姚伟楠
*
*/
class Object{
private static Object instance=null;
private Object() {}
public static synchronized Object getInstance(){
if(null==instance)instance=new Object();
return instance;
}
}
/**
* 饿汉式(初始化类时候实例化)
* @author 姚伟楠
*
*/
class Object1{
private static Object1 instance=new Object1();
private Object1(){}
public static Object1 getInstance(){
return instance;
}
}
/**
* 登记式(内类存储实例并作登记,需要时直接按照登记号(类名)获取)
* @author 姚伟楠
*
*/
class Object2{
private static Map<String, Object2> instances=new HashMap<String, Object2>();
static{
Object2 instance=new Object2();
instances.put(Object2.class.getName(), instance);
}
/**
* 保证子类、同包、自身可以创建非单例实例
*/
protected Object2(){}
public static Object2 getInstance(String name){
if(null==name){
name = Object2.class.getName();
}
if(instances.get(name) == null) {
try {
instances.put(name, (Object2) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return instances.get(name);
}
}
分享到:
相关推荐
以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...
Python作为一种灵活且强大的编程语言,提供了多种方式来实现单例模式。 #### 使用类装饰器实现单例 通过使用类装饰器来实现单例模式是最常见的方式之一。这种方法的核心思想是在创建类实例时检查是否存在已有的...
在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的...
总之,这个C++实现的单例模式日志类结合了多种高级特性,包括多线程支持、日志等级控制、毫秒级时间戳和灵活的参数及格式化输出。这样的设计对于任何需要记录系统事件或调试的项目都是一个强大的工具。
在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...
在Java中,我们可以使用多种方式来实现单例模式: 1. **饿汉式(静态常量)**:这是最简单的单例实现方式,它在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class...
这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看
在C++中,实现单例模式有多种方式,这里我们将聚焦于懒汉式(Lazy Initialization)的实现。懒汉式单例的特点是延迟初始化,即只有在第一次使用时才会创建实例,这有助于提高程序的运行效率。 一、懒汉式单例模式的...
Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑到了线程安全问题,因此使用枚举实现单例模式是一种简洁而且高效的解决方案。 6. 容器式单例(Singleton Holder) 通过一个私有的静态内部类...
在Java中,实现单例模式有多种方式,但最常见的问题是线程安全问题。例如,上述代码展示了一个简单的单例实现,称为"饿汉式"单例,因为无论是否需要,它都会在类加载时立即创建实例。这种方式虽然简单,但在多线程...
单例模式是软件设计模式中的一种经典模式,其主要...总结起来,单例模式有多种实现方式,每种方式都有其适用场景和优缺点。在实际应用中,开发者应根据项目需求选择合适的单例实现,并注意线程安全和反序列化等问题。
- 实现单例模式通常有懒汉式、饿汉式和双重检查锁定等方式,选择哪种方式取决于线程安全需求和性能考虑。 3. **缺省适配器模式(Default Adapter Pattern)**: - 当一个类需要使用某个接口,但不希望实现所有的...
Python 作为一种动态类型的脚本语言,实现单例模式有多种方式,例如使用模块级别的变量、基类元类、装饰器等。在本次分享的压缩包文件中,代码采用的是类变量的方式来实现单例模式。这种实现方式的主要思路是将类的...
在C++中实现单例模式通常有多种方法,其中较为常见的有:饿汉式、懒汉式、线程安全的懒汉式、双重校验锁、枚举式以及C++11的基于local static变量和线程局部存储的实现方法。每种实现方式都有其适用的场景和利弊。 ...
在Java中,我们可以采用多种方式来实现单例模式,其中最常见的是懒汉式(Lazy Initialization)和饿汉式(Eager Initialization)。根据提供的文件名`Singleton.java`,我们猜测这里可能实现的是懒汉式单例,因为...
总之,Java单例模式有多种实现方式,每种方式都有其适用场景和优缺点。选择哪种实现方式取决于项目需求,如是否需要延迟加载、是否考虑多线程环境、代码的可读性和维护性等。在实际开发中,应根据具体情况灵活选择。
在Python中,由于其动态语言特性,实现单例模式有多种方式,例如使用模块级别变量、元类或者装饰器。 下面是一个简单的Python单例模式日志记录器的实现: ```python class SingletonLogger(object): _instance = ...
Java中实现单例模式的方法有很多种,每种方法都有其适用场景和优缺点。选择合适的实现方式需要根据实际需求和应用场景综合考虑。例如,如果程序启动时就需要单例对象,那么可以使用饿汉式;如果希望在真正需要时才...
在C#中,实现单例模式有多种方法,这里我们将深入探讨这些方法及其优缺点。 1. **静态内部类实现** 这是最推荐的C#单例模式实现方式,因为它既线程安全,又避免了懒汉式(延迟初始化)的同步开销。代码如下: ``...