`
schumee
  • 浏览: 25852 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Effective Java 学习笔记第2条 --- 试用私有构造函数强化singleton属性

阅读更多

实现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 ...

    java-thread-safe-singleton-pattern.rar_starvation

    if (instance == null) { // 第二次检查 instance = new Singleton(); } } } return instance; } } ``` 总结来说,Java线程安全的单例模式实现需要考虑并发环境下的数据一致性。饥饿模式可能导致线程长时间...

    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私有构造器使用方法示例

    在 Java 中实现 Singleton 属性有两种方式,一种是使用私有构造器强化 Singleton 属性,另一种是使用枚举强化 Singleton 属性。对于第一种方法,可以使用私有构造器来实例化公有的静态 final 域,然后使用静态方法 ...

    Effective-Java读书笔记(上)

    ### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...

    单例模式Singleton(java源码)

    Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...

    Laravel开发-singleton-pattern

    实现单例模式的关键在于控制类的构造函数和对象的实例化过程。在Laravel中,我们可以使用`App::singleton()`方法来注册一个单例绑定。例如,如果我们有一个名为`DatabaseManager`的类,我们可以在服务容器中注册它为...

    java设计模式----单例模式

    在给出的例子中,`SingleTon`类的静态私有实例`st`在类加载时就被初始化了,这确保了无论何时,`getInstance()`方法都只会返回同一个实例。饿汉模式的优势在于其性能,由于在类加载时已经创建了实例,所以不会有同步...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    java代码笔记2010-05-31:继承this()的使用多态;单态;静态初始化;==比较的是地址;参数传递的是个值的拷贝还是引用的传递;循环菱形

    总结一下,本篇笔记涵盖了Java编程中的重要概念,包括构造器链、多态性、单态模式、静态初始化和对象引用比较,以及参数传递机制。理解并熟练运用这些知识点,能帮助开发者写出更加高效、可靠的Java代码。

    perl-Class-Singleton-1.4-6.el6.noarch.rpm

    perl-Class-Singleton-1.4-6.el6.noarch.rpm perl-Class-Singleton-1.4-6.el6.noarch.rpm

    Java面向对象(高级)- 单例(Singleton)设计模式

    实现方式通常是将类的构造器设为私有,然后通过一个静态方法(通常称为getInstance)来获取唯一的实例。这样做既可以防止外部代码直接创建对象,又可以保证全局只有一个实例。 (3)实现思路 为了实现单例模式,...

    java必须掌握的重点知识 - 副本

    ### Java 必须掌握的重点知识 #### 黑马培训班基础班资料之重点知识解析 **一、面试技巧** 面试作为求职过程中的重要环节之一,其重要性不言而喻。以下是一些关于如何准备面试及面试过程中应注意的关键点: 1. *...

    PyPI 官网下载 | dask-actor-singleton-1.1.0.tar.gz

    **PyPI 官网下载 | dask-actor-singleton-1.1.0.tar.gz** 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了发布和分享Python软件包的平台。`dask-actor-singleton-1.1.0.tar.gz`...

    singleton设计模式java实现及对比

    **Singleton设计模式** Singleton设计模式是软件工程中最常用的设计模式之一,它的主要目的是确保一个类只有一个实例,并提供全局访问点。在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将...

    java笔记 java笔记

    ### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    java-design-patterns-master_JAVAdesignpattens_java_design_

    这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...

    Java开发学习(三)----Bean基础配置及其作用范围.doc

    在Java开发中,Spring框架是核心的IoC(Inversion of Control)和DI(Dependency Injection)容器,它管理着应用中的对象,也就是所谓的bean。在本篇文档中,我们将深入探讨bean的基础配置,包括bean的id、class属性...

    Java语言中的构造方法私有化.pdf

    在Java中,私有构造方法是通过将构造函数声明为private来实现的,这使得其他类无法直接实例化该类的对象。本文将深入探讨私有构造方法的应用及其在单态模式中的作用。 首先,我们来看一个简单的例子,演示了如何将...

Global site tag (gtag.js) - Google Analytics