`
yy77
  • 浏览: 8337 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类

对于一个单例的存取强制一个private constructor或者一个enum

阅读更多
在Java中有很多需要单例(Singleton)的场合,来保证其只被创建一次。先来看看2种在JDK1.5之前的2种实现方法,然后再看一种JDK1.5及以后才可以用的实现方法。
[list=1]
  • 声明constructor为private,然后将该单例对象声明为public的。
  • // Singleton with public final field
    public class Elvis {
        public static final Elvis INSTANCE = new Elvis();
        private Elvis() { ... }
        public void method2use() {...}
    }
    

    其中由于constructor是private的,所以不能直接由别的类来调用,只能由本类的内部调用。由于上面的static的对象的关系,这个constructor就只会被调用一次,成功地实现了单例。
    这个用法其实不是很常见。它的好处是,作为一个public的属性对象,它可以被声明为final保证了其内容不被修改。作为一个声明而言,非常利于理解。
  • 声明constructor为private,然后该单例对象也声明为private,然后再加一个public的getInstance方法。
  • public class Elvis {
        private static final Elvis INSTANCE = new Elvis();
        private Elvis() { ... }
        public static Elvis getInstance() { return INSTANCE; }
        public void method2use() {...}
    }

    这个就是我们最常见的方法了。而且因为使用了一个method来返回,在自由度上能够大上许多,甚至可以返回其子类的实例。在多线程的时候也可以加以改进。
  • 最后这种方法就要用到jdk1.5才开始引入的enum了。
  • 简单的enum的用法,就和c++一样。
    public enum Grade { A, B, C, D, F, INCOMPLETE };
    

    然后直接可以使用Grade.A之类的来使用。但是,其实enum和class在内部的实现上还有有一些类似的(具体尚未深究,看看TIJ4应该会有收获,好多页啊)。
    最简单的,是个可以在里面加一个method!
    public enum Elvis {
        INSTANCE;
        public void method2use() { ... }
    }
    

    这样,连constructor都可以不要了。
    据说这是最好的一种方法,直接能够防止多重访问等等。
    这是我从来没有使用过的方法,以后有机会要试试。
    [/list]
    1
    1
    分享到:
    评论

    相关推荐

      egret 单例场景管理类-一个小例子

      在 Egret 中,单例模式是一种常用的设计模式,用于确保某个类在整个应用生命周期中只有一个实例存在。单例模式在场景管理中尤为重要,因为它可以帮助我们有效地控制游戏场景的切换和管理,保持数据的一致性。 在这...

      Delphi实现单例

      1. 首先,定义一个单例类,例如命名为`SingletonClass`。这个类应该包含你需要共享的数据和方法。 ```delphi unit SingletonUnit; interface type TSingletonClass = class sealed private class var ...

      PHP中Private修饰符与Constructor.pdf

      PHP 中 Private 修饰符与 Constructor ...在 PHP 中,访问控制修饰符有三种,即 public、protected 和 private。...private 修饰符和构造器在 PHP 中是一个非常重要的概念,需要我们认真地学习和掌握。

      设计模式_创建型_单例模式.md

      如果这个单例加载比较耗时,或者不需要延迟加载,那么采用饿汉式单例是一个较好的选择。 ### 懒汉式单例(Lazy Initialization) 懒汉式单例在第一次调用时实例化,在多线程环境下,如果没有处理好线程同步问题,就...

      使用Java单例模式实现一个简单的登录验证系统.txt

      ### 使用Java单例模式实现一个简单的登录验证系统 #### 登录验证系统概述 本文档将详细介绍如何使用Java语言结合单例设计模式实现一个简单的登录验证系统。登录验证系统是现代软件应用中的基本功能之一,它负责...

      java设计模式之单例模式

      Java设计模式中的单例模式是一种常用的创建型设计模式,它保证了类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置信息等。接下来,我们将深入探讨8种不同的单例...

      Delphi-Singleton.rar_delphi_delphi单例模式

      单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在 Delphi 中,实现单例模式同样重要,因为它在控制资源、管理共享对象或者在整个应用程序生命周期内仅需实例化一次的对象时非常...

      常见设计模式-单例模式

      单例模式是一种常见的设计模式,它的主要作用是确保在内存中仅创建一次对象,并提供一个全局访问点。单例模式有两种类型:饿汉类型和懒汉类型。 饿汉类型的单例模式是在类加载时创建对象,例如: ```java class ...

      浅谈Spring单例Bean与单例模式的区别

      单例模式是指在一个JVM进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例。 在实际应用中,如果将对象的生命周期完全交给Spring管理(不在其他地方通过new、反射等...

      单例模式

      单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源的访问,或者创建昂贵的对象时减少内存开销。在Java、C#、Python...

      Node.js-private-class保护类私有属性的一个模块

      `private-class`模块就是为了填补这一空白,它是一个用于Node.js环境中的工具,旨在帮助开发者创建具有私有属性和方法的类。本文将详细讲解如何利用`private-class`模块来实现类的私有化,以及其背后的原理和应用...

      boa-constructor-0.6.1. for python2.5

      6. **社区支持**:作为开源项目,Boa Constructor有一个活跃的社区,开发者可以在这里获取帮助,分享经验,或者参与到项目的改进中。 "boa-constructor-0.6.1.bin.setup.exe" 这个文件名表明它是Boa Constructor ...

      java反射之Constructor

      需要注意的是,如果某个类中没有定义构造方法,第一个和第三个方法返回的数组中只有一个元素,就是缺省的构造方法;如果某个类中只定义了有参数的构造函数,而没有定义缺省构造函数,第一个和第三个方法返回的数组中...

      boa-constructor入门介绍

      1. **启动Boa-constructor**:安装完成后,运行Boa-constructor,你会看到一个空白的工作区和控件面板。 2. **创建新项目**:点击菜单栏的“File” -> “New Project”,指定项目名称和保存位置。 3. **设计界面**...

      JavaScript的constructor属性[文].pdf

      当然,这只是一个简单的示例代码,实际上我们需要书写更精确的正则表达式来匹配 constructor 属性的返回值。例如: ```javascript / function user\(\)/ ``` 这个正则表达式可以帮助我们匹配 constructor 属性的...

      第八课 单例模式1

      单例模式是一种设计模式,它的主要目标是确保一个类在整个应用程序中只有一个实例存在,并提供一个全局访问点,以便任何地方都能方便地使用该实例。这种模式在需要频繁创建和销毁对象,或者对象创建代价较高的场景中...

      javascript单例模式

      JavaScript 单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在JavaScript中,由于其动态特性和全局作用域,实现单例模式相对简单,但同样需要注意防止不必要的资源浪费和...

      Kotlin 单例实例详解

      在编程领域,单例模式是一种常用的软件设计模式,它的核心思想是确保一个类只有一个实例,并提供全局访问点。在Kotlin中,实现单例有多种方式,这里我们将深入探讨两种常见的实现方法:同伴对象(companion object)...

      boa.rar_Boa Construct_boa_boa constructor_boa constructor chm_bo

      而"boa"文件可能是一个未给出完整路径或扩展名的文件,可能是Boa Constructor的主程序、配置文件或者其他的配套资源。 Boa Constructor的主要特点包括: 1. **基于Python**:Boa Constructor使用Python作为其后端...

    Global site tag (gtag.js) - Google Analytics