这几天感觉想写点什么,但又没什么好写,最近又听人说起单例模式,所以想复习一下,把它写在这里。
单例就是指一个类只有一个实例。准确定义:
The Single pattern provides the possibility to control the number of instances(mostly one) that are allowed to be made.We also receive a global
point of access to it(them).
实现方法有三种:
1、采用synchronized方法的方式实现。
public class Singleton {
private static Singleton uniqueInstance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(uniqueInstance==null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
此方法有一些不足:因为只有第一次执行此方法时,才真正需要同步,一旦设置好uniqueInstance变量,就不再需要同步此方法。因此存在一些性能影响。
2、急切实例化
public class EagerSingleton {
private static EagerSingleton uniqueInstance = new EagerSingleton();
private EagerSingleton(){}
public static EagerSingleton getInstance(){
return uniqueInstance;
}
}
此方法在使用之前就把对象创建好了,所以不存在同步问题。如果在创建和运行时负担不太重的话,则较为合理。
3、双重检查加锁
public class DoubleCheckedSingleton {
private volatile static DoubleCheckedSingleton uniqueInstance;
private DoubleCheckedSingleton() {
}
public static DoubleCheckedSingleton getInstance() {
if (uniqueInstance == null) {
synchronized (DoubleCheckedSingleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new DoubleCheckedSingleton();
}
}
}
return uniqueInstance;
}
}
volatile: 当uniqueInstance被实例化时,多个线程正确地处理uniqueInstance变量,在JAVA 5 中有效。
单例模式的使用场合:
When only one instance or a specific number of instances of a class are allowed.
Facade objects are often Singletons because only one Facade object is required.
就是说当一个对象只需要一个实例或明确的实例个数时才被使用。外观对象(具体可见外观模式)通常就是单例模式。
优点:
* Controlled access to unique instance.
* Reduced name space.
* Allows refinement of operations and representations.
缺点:
Singleton pattern is also considered an anti-pattern by some people,who feel that it is overused,introducing unnecessary limitations in situations where a sole instance of a class is not actually required.
最新发现一种,就是通过枚举enum的方式:
public enum Elvis {
INSTANCE;
private int age;
public int getAge() {
return age;
}
}
and then called Elvis.INSTANCE.getAge()也可以这样:
public enum Elvis {
INSTANCE;
private int age;
public static int getAge() {
return INSTANCE.age;
}
}
and called Elvis.getAge()
优点:无偿的提供了序列化机制,能绝对保证实例的唯一性,是实现单例的最佳方法。
分享到:
相关推荐
### C++中实现Singleton模式的关键知识点 #### 一、Singleton模式简介 Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源...
**C++实现的Singleton模式详解** Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个...
### Java的Singleton模式详解 #### 一、Singleton模式概述 Singleton模式是一种常用的设计模式,在Java中主要用于确保一个类只有一个实例,并提供一个全局访问点。这种模式对于管理共享资源(如数据库连接池、...
### 最简单的设计模式学习:Singleton模式 #### 一、Singleton模式简介 Singleton(单例)模式是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场合下非常...
Singleton模式是设计模式中的一种创建型模式,它在软件工程中扮演着重要的角色。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。Singleton模式的应用场景通常涉及到系统...
Singleton模式: 确保一个类只有唯一的一个实例。 Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton...
Singleton模式是一种设计模式,它是创建型模式的一种,用于控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式在系统中需要频繁创建和销毁对象,且对象需要共享资源时非常有用,比如配置...
《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...
在Java编程中,Singleton模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。线程安全的Singleton模式对于多线程环境尤为重要,因为它可以防止多个线程同时创建多个实例。本文将详细介绍...
【深入浅出单例Singleton模式】 单例模式是一种在软件设计中常见的设计模式,它的核心目标是确保一个类只有一个实例,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于控制资源的共享,如全局...
这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...
双重检测锁(Double-Checked Locking)实现的Singleton模式在多线程应用中有相当的价值。在ACE的实现中就大量使用ACE_Singleton模板类将普通类转换成具有Singleton行为的类。这种方式很好地消除了一些重复代码臭味,...
综上所述,Qt Qml的Singleton模式为全局共享对象提供了方便,使得在Qml环境中管理和访问同一对象变得简单。通过C++和Qml的有效结合,我们可以构建出高效且易于维护的应用程序。了解和熟练运用Singleton模式,对于...
在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将详细探讨这些实现方法并进行对比。 ### 1. 饿汉式(Static Final Field) 这是最简单的Singleton实现方式,通过静态初始化器在类加载时就...
接下来,我们将深入探讨Java Singleton模式的实现方式、优缺点以及使用场景。 一、Singleton模式的实现 1. 饿汉式(静态常量) ```java public class Singleton { private static final Singleton INSTANCE = ...
单态模式(Singleton模式)是Java设计模式中的一种,它的主要目标是确保一个类在整个应用程序中只有一个实例存在。这种模式的应用场景广泛,特别是在需要全局共享的资源管理、配置中心、日志服务等场合非常常见。 ...