实现singleton的方法有两种:
方法一:公有的静态成员是一个final域,成员的声明很清楚的表达了这个类是一个singleton。
view plaincopy to clipboardprint?
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public void leaveTheBuilding() {
System.out.println("Who a baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.INSTANCE;
elvis.leaveTheBuilding();
}
}
方法二:提供一个公有的静态方法,而不是公有的静态final域。该方式提供了更大的灵活性,在不改变API的前提下,可以把该类改成singleton或者非singleton的。
view plaincopy to clipboardprint?
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() {
System.out.println("Who a baby, I'm outta here!");
}
// This code would normally appear outside the class!
public static void main(String[] args) {
Elvis elvis = Elvis.getInstance();
elvis.leaveTheBuilding();
}
}
一般来说,第一种方法效率稍微高一些,然后,采用第一种方法实现singleton后,就没有改变的余地了,当你想把该类改成非singleton,显然
是不行的了。所以,除非确实确定该类是一个singleton,那就用第一个方法吧。用第2种方法的时候,假如该类实现了serializable接口,
那应该重写(override)readResolve()方法,否则再反序列化的时候是会产生一个新的实例,这与singleton相违背了!
分享到:
相关推荐
2. 将构造函数和析构函数声明为私有成员 将构造函数和析构函数声明为私有成员,可以禁止外部用户直接调用这些函数,包括子类的成员函数。例如: ```cpp class A { private: A() {} ~A() {} public: void ...
if (instance == null) { // 第二次检查 instance = new Singleton(); } } } return instance; } } ``` 总结来说,Java线程安全的单例模式实现需要考虑并发环境下的数据一致性。饥饿模式可能导致线程长时间...
2.2. Java中基本概念 2-5 3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 ...
在 Java 中实现 Singleton 属性有两种方式,一种是使用私有构造器强化 Singleton 属性,另一种是使用枚举强化 Singleton 属性。对于第一种方法,可以使用私有构造器来实例化公有的静态 final 域,然后使用静态方法 ...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...
实现单例模式的关键在于控制类的构造函数和对象的实例化过程。在Laravel中,我们可以使用`App::singleton()`方法来注册一个单例绑定。例如,如果我们有一个名为`DatabaseManager`的类,我们可以在服务容器中注册它为...
在给出的例子中,`SingleTon`类的静态私有实例`st`在类加载时就被初始化了,这确保了无论何时,`getInstance()`方法都只会返回同一个实例。饿汉模式的优势在于其性能,由于在类加载时已经创建了实例,所以不会有同步...
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
总结一下,本篇笔记涵盖了Java编程中的重要概念,包括构造器链、多态性、单态模式、静态初始化和对象引用比较,以及参数传递机制。理解并熟练运用这些知识点,能帮助开发者写出更加高效、可靠的Java代码。
perl-Class-Singleton-1.4-6.el6.noarch.rpm perl-Class-Singleton-1.4-6.el6.noarch.rpm
实现方式通常是将类的构造器设为私有,然后通过一个静态方法(通常称为getInstance)来获取唯一的实例。这样做既可以防止外部代码直接创建对象,又可以保证全局只有一个实例。 (3)实现思路 为了实现单例模式,...
### Java 必须掌握的重点知识 #### 黑马培训班基础班资料之重点知识解析 **一、面试技巧** 面试作为求职过程中的重要环节之一,其重要性不言而喻。以下是一些关于如何准备面试及面试过程中应注意的关键点: 1. *...
**PyPI 官网下载 | dask-actor-singleton-1.1.0.tar.gz** 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了发布和分享Python软件包的平台。`dask-actor-singleton-1.1.0.tar.gz`...
**Singleton设计模式** Singleton设计模式是软件工程中最常用的设计模式之一,它的主要目的是确保一个类只有一个实例,并提供全局访问点。在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将...
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了...
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...
在Java开发中,Spring框架是核心的IoC(Inversion of Control)和DI(Dependency Injection)容器,它管理着应用中的对象,也就是所谓的bean。在本篇文档中,我们将深入探讨bean的基础配置,包括bean的id、class属性...
在Java中,私有构造方法是通过将构造函数声明为private来实现的,这使得其他类无法直接实例化该类的对象。本文将深入探讨私有构造方法的应用及其在单态模式中的作用。 首先,我们来看一个简单的例子,演示了如何将...