欢迎来到天天文库
浏览记录
ID:40308295
大小:322.21 KB
页数:30页
时间:2019-07-30
《单例模式完全剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、单例模式关键字:设计模式一、什么是单例模式? 在我们的Java应用程序中,随着应用程序的运行会创建出很多对象。但有时候我们希望在创建某类对象时,无论创建多少次该类对象只有一份在内存中。这就是单例模式。如果我们要实现单例模式首先要保证构造函数私有化,即不允许用户随意调用我本类的构造函数,因为只要通过new操作创建对象,必定要在堆中开辟空间,这样就无法实现单例了。二、单例模式的实现publicclassSingleton{ privatestaticSingletonsingle=null; privateSingleton(){} publicstaticS
2、ingletongetSingleton(){ if(single==null){ single=newSingleton(); } returnsingle; }}概要单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,DavidGeary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统
3、,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。单例模式的用意在于前一段中所关心的。通过单例模式你可以:确保一个类只有一个实例被建立提供了一个对对象的全局访问指针在不影响单例类的客户端的情况下允许将来有多个实例尽管单例设计模式如在下面的图中的所显示的一样是最简单的设计模式,但对于粗心的Java开发者来说却呈现出许多缺陷。这篇文章讨论了单例模式并揭示了那些缺陷。注意:你可以从Resources下载这篇文章的源代码。单例模式在
4、《设计模式》一书中,作者这样来叙述单例模式的:确保一个类只有一个实例并提供一个对它的全局访问指针。下图说明了单例模式的类图。(图1)单例模式的类图正如你在上图中所看到的,这不是单例模式的完整部分。此图中单例类保持了一个对唯一的单例实例的静态引用,并且会从静态getInstance()方法中返回对那个实例的引用。例1显示了一个经典的单例模式的实现。例1.经典的单例模式Java代码1.public class ClassicSingleton { 2. private static ClassicSingleton instance = null; 3. 4
5、. protected ClassicSingleton() { 1. // Exists only to defeat instantiation. 2. } 3. public static ClassicSingleton getInstance() { 4. if(instance == null) { 5. instance = new ClassicSingleton(); 6. } 7. return instance; 8. } 9.} publ
6、icclassClassicSingleton{privatestaticClassicSingletoninstance=null;protectedClassicSingleton(){//Existsonlytodefeatinstantiation.}publicstaticClassicSingletongetInstance(){if(instance==null){instance=newClassicSingleton();}returninstance;}}在例1中的单例模式的实现很容易理解。ClassicSingleton类保持了一个对单独的单例实例的
7、静态引用,并且从静态方法getInstance()中返回那个引用。关于ClassicSingleton类,有几个让我们感兴趣的地方。首先,ClassicSingleton使用了一个众所周知的懒汉式实例化去创建那个单例类的引用;结果,这个单例类的实例直到getInstance()方法被第一次调用时才被创建。这种技巧可以确保单例类的实例只有在需要时才被建立出来。其次,注意ClassicSingleton实现了一个protected的构造方法,这样客户端不能直接实例化一个ClassicSingleton类的实例。然而,你会惊奇的发现
此文档下载收益归作者所有