例模式 (Singleton),也叫单子模式 ,是一种常用的软件设计模式 。在应用这个模式时,单例对象的类 必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象 ,这样有利于我们协调系统整体的行为。比如在某个服务器 程序中,该服务器的配置信息存放在一个文件 中,这些配置数据由一个单例对象统一读取,然后服务进程 中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名 称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们 还将该类的构造函数 定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
单例模式在多线程 的 应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例, 这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。
构建方式
通常单例模式在Java语言中,有两种构建方式:
- 懒汉方式 。指全局的单例实例在第一次被使用时构建。
- 饿汉方式。指全局的单例实例在类装载时构建。
例子
在Java编程语言 中,单例模式应用的例子如下述代码所示:
饿汉方式
public class Singleton { private static Singleton INSTANCE = new Singleton(); // Private constructor suppresses // default public constructor private Singleton() {} public static Singleton getInstance() { return INSTANCE; } }
懒汉方式
public class Singleton { private static Singleton INSTANCE = null; // Private constructor suppresses // default public constructor private Singleton() {} public synchronized static Singleton getInstance() { if(INSTANCE==null) INSTANCE=new Singleton(); return INSTANCE; } }
在C++ 编程语言中,单例模式应用的例子如下述代码所示(这里仅仅提供一个示例,这个例子对多线程的情况并不是安全的):
template<typename T> class Singleton { public: static T& Instance() { static T theSingleInstance; //assumes T has a default constructor return theSingleInstance; } }; class OnlyOne : public Singleton<OnlyOne> { private: OnlyOne(){} OnlyOne(OnlyOne& rhs){} friend class Singleton<OnlyOne>; //..rest of interface defined here };
最好的一种单例定义方式:
public class SingletonClass { private static class SingletonClassInstance { private static final SingletonClass instance = new SingletonClass(); } public static SingletonClass getInstance() { return SingletonClassInstance.instance; } private SingletonClass() { } }
相关推荐
单例模式--只能弹出一个窗体 只能弹出一个窗体
设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)
单例模式属于构建模式之一, 优点:实例控制--伸缩性 缺点:系统开销---开发混淆---对象生命周期
单例模式-ARC
Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)
2 单例模式-课程内容.rar
2 单例模式-MOOC课程内容.pdf
该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...
NULL 博文链接:https://gaojiewyh.iteye.com/blog/411889
单例模式的七种实现方法以及分析,可以作文大作业提交 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 2.2IDEA简介 4 3. 单例模式的7种实现方式 5 3.1饿汉式(使用静态常量...
NULL 博文链接:https://geyubin.iteye.com/blog/559125
双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。
饿汉模式在类加载时就创建了实例
懒汉模式是延迟加载的方式,在首次调用getInstance()方法时才会创建实例;
静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。
单例模式单例模式单例模式单例模式单例模式单例模式单例模式单例模式
java设计模式中的单例模式,而单例模式又分为饿汉模式和懒汉模式
李建忠老师的设计模式-单例模式讲解,示例以C++编程语言呈现。
线程安全,使用synchronized关键字
前两年IOS应用源码-主要是用于毕业设计学习的。