Last modified:2013-04-10 19:48:06
**********************************************
设计模式:解决某一类问题最行之有效的方法。
java中有23种设计模式:
单例设计模式:解决一个类在内存中只存在一个对象。
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
想要保证对象唯一。
1.为了避免其他程序过多建立该类对象。先控制禁止其他程序建立该类对象。
2.还为了让其他程序访问到该类对象,只好在本类中自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三步怎么用代码体现?
1,将构造函数私有化。
2,在类中创建一个本类对象。
3,提供一个方法获取该对象。
对于事物该怎么描述,还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
//饿汉式 class Single{ private static Single s = new Single(); private Single(){} public static Single getInstance(){ return s; } } //懒汉式: class Single{ private static Single s = null; private Single(){} public static Single getInstance(){ if(s==null){//解决方法在外层加一个是否为空的判断。 synchronized(Single.class){//加锁效率降低了 if(s==null) s = new Single(); } } return s; }
优点:
1, 实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
2, 灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点:
1, 开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
2, 可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
3, 对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
相关推荐
单例设计模式的优缺点 设计思想 举例表示
单例设计模式源码和案例解析,详细分析四种单例设计模式的使用方法, 并附有博客文档说明。单例设计模式源码和案例解析
文章详细描述了什么是单例设计模式以及单例设计模式的的好处和应用。
C++单例设计模式,单例模式 C++单例设计模式,单例模式
单例设计模式:一直觉得单例模式自己掌握的挺好,但是看完这篇文章后汗颜了。。。
C++单例设计模式: 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如...
IOS 单例设计模式实例Demo 单例 设计 模式 IOS Singleton
单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
单例设计模式、工厂设计模式和抽象工厂模式是常见的软件开发设计模式。这些设计模式提供了一些有用的思想和实现方式,可以帮助开发人员在设计和实现复杂的软件系统时,更加灵活和高效地进行编程。 单例设计模式是一...
简单的单例模式,帮助大家理解代码,主要是用纯java写的。
java单例设计模式
Qt单例设计模式(1-8)
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
单例模式(单例设计模式)详解1
PHP单例设计模式,连接多数据库源码 单例模式的三个特点 1: 一个类只能有一个实例 2: 它保修自行创建这个实例 3: 必须自行向整个系统提供这个实例. 单例模式中主要的角色 Singleton定义一个Instance操作,允许客户...
本文档,详细的描述了单例模式,有类图,java代码实例,以及讲解、注意点,通过这份文档可以让你很容易理解单例设计模式。
单例设计模式Singleton1
02_JavaSE面试题:单例设计模式
第04章 面向对象(上) 13 单例设计模式