`
westlifesz
  • 浏览: 118426 次
社区版块
存档分类
最新评论

Singleton类

 
阅读更多

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:第一种形式: 定义一个类,它的构造函数为private的,它有一个staticprivate的该类变量,在类初始化时实例话,通过一个publicgetInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
  

private Singleton(){}  //在自己内部定义自己一个实例,是不是很奇怪?  //注意这是private 只供内部调用  

private static Singleton instance = new Singleton();  //这里提供了一个供外部访问本class的静态方法,可以直接访问    public static Singleton getInstance() {    return instance;      }
}

第二种形式:
public class Singleton {
  private static Singleton instance = null;  public static synchronized Singleton getInstance() {  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次       //使用时生成实例,提高了效率!  if (instance==null)    instancenew Singleton();
return instance;
  }
}
其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些

分享到:
评论

相关推荐

    singleton设计模式java实现及对比

    缺点:对Singleton类的实现过程有所隐藏,不太符合开放封闭原则。 ### 5. 枚举 这是Joshua Bloch在《Effective Java》中推荐的方式。 ```java public enum Singleton { INSTANCE; public void whateverMethod...

    C++完美实现Singleton模式

    如果项目中有多个Singleton类需要实现,那么重复的代码将会增多。为了解决这个问题,可以通过模板化Singleton类来减少代码量: ```cpp #pragma once #include using namespace std; using namespace C2217::Win32;...

    C++ 实现的singleton 模式

    在`Singleton.h`中,我们定义Singleton类: ```cpp class Singleton { public: // 静态成员函数,返回Singleton的唯一实例 static Singleton* getInstance(); private: // 私有构造函数,防止直接创建实例 ...

    Singleton

    这种方式是线程安全的,且只在Singleton类加载时初始化Singleton实例,因此既解决了懒加载,又避免了同步问题。 ```java public class Singleton { private Singleton() {} private static class Singleton...

    Singleton Pattern 源码

    内部类不会在Singleton类加载时立即加载,只有当`getInstance`被调用时,SingletonHolder类才会被加载,从而创建Singleton实例。 5. 枚举单例: 这是Joshua Bloch在《Effective Java》中推荐的单例实现方式,既...

    Singleton模式源程序

    1. 私有化构造函数:Singleton类的构造函数通常声明为私有的,防止其他类通过new操作符直接创建实例。 2. 单例实例的静态成员变量:这个静态成员变量保存Singleton类的唯一实例。 3. 获取实例的方法:一个公共的静态...

    singleton面试题转

    Singleton类中包含一个私有的静态内部类,内部类中创建Singleton的实例。这种方式保证了类加载时不会立即创建Singleton实例,只有当getInstance()被调用时,内部类才会被加载,从而创建Singleton实例。 ```java ...

    FED:Dart Singleton类使Flutter的设计更轻松,更快捷

    在标题“FED:Dart Singleton类使Flutter的设计更轻松,更快捷”中,我们探讨的是如何利用Dart中的Singleton模式提升Flutter应用的开发效率和运行速度。 首先,理解Singleton模式的基本概念是至关重要的。Singleton...

    设计模式之Singleton(单态)

    3. **测试**:测试Singleton类时,需考虑静态初始化可能导致的问题,可能需要特殊的测试策略。 4. **静态内部类**:使用静态内部类实现Singleton,可以在保证线程安全的同时避免类加载时的实例化。 5. **生命周期...

    WTFacebookManager:一个简单的Singleton类,可以为您提供FBSDKManager的所有基本操作

    一个简单的Singleton类,可以为您提供FBSDKManager的所有基本操作。 特性 static sharedInstance:WTFacebookManager->此类的共享实例,可以与函数进行交互。 currentToken:FBSDKAccessToken->用户从中登录的当前...

    Employment-Application-in-Java:Java程序,该程序在多个公司中实施招聘过程,具有Singleton类,该类包含申请人,公司,招聘人员等的列表,并根据其社交活动的BFS查找最适合在特定公司工作的用户。网络和他的简历

    这个程序的核心是一个Singleton类,该类不仅维护了申请人、公司以及招聘人员的信息,还通过广度优先搜索(BFS)算法,基于申请人的社交网络活动和简历,来寻找最匹配特定公司岗位的候选人。 首先,让我们深入了解...

    多线程下的singleton

    这里的Singleton类在没有被引用时不会被加载,因此Singleton实例会在第一次调用`getInstance()`时才被创建,且线程安全。 还有一种“枚举”实现方式,既简单又线程安全: ```java public enum Singleton { ...

    简化程式的架构—Singleton的使用1

    `MySingleton`可能是用来处理通用的游戏逻辑或作为其他Singleton类的父类,而`MyGameData`则专门用于存储和管理游戏数据。 首先,我们看`MySingleton`类: 1. 类中定义了一个静态私有变量`s_singleton`,用于存储...

    list循环退出Activity,单例模式实现android的退出功能,代替广播,singleton

    通过将单例模式和Singleton类的实现方式结合起来,可以有效地管理Activity的生命周期,并且可以在应用程序的任何地方安全地退出所有Activity,甚至结束应用程序本身。这种方式在某些场景下非常有用,尤其是在需要...

    完美Singleton实现

    这种实现方式能够确保在整个程序运行期间,Singleton类只有一个实例存在。然而,它也存在一些问题: 1. **内存泄漏**:在示例代码中,只有`new`操作而没有相应的`delete`操作,这意味着在程序退出之前,这个对象会...

    SingletonTest Demo代码

    - **Singleton类**:实现Singleton模式的类,如`SingletonTest`,其中包含`sharedInstance`方法用于获取Singleton实例。 - **测试用例**:为了验证Singleton工作正常,Demo通常会包含测试代码,尝试从不同线程或不同...

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

    在这个改进的例子中,Singleton类提供了一个名为getInstance的静态方法,该方法返回Singleton类的唯一实例。外部类可以通过这个静态方法获取Singleton的实例,而不是通过构造方法。这种方法确保了整个程序中只有一个...

    Java类加载器:静态变量初始化.docx

    在 Singleton 类的静态块中,我们首先对 a 和 b 进行初始化,接着创建了一个 Singleton 实例,并将其赋值给 singleton 变量。最后,在 main 方法中,我们通过 Singleton.getInstance() 方法获取 Singleton 实例,并...

    C++ 单一实例

    1. **私有化构造函数和拷贝构造函数**:为了防止外部直接通过`new`关键字创建实例,Singleton类的构造函数和拷贝构造函数通常声明为私有的。 2. **静态成员变量**:定义一个静态的类成员,保存唯一的实例。由于静态...

Global site tag (gtag.js) - Google Analytics