黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: 宋晓明    时间: 2013-5-6 09:59
标题: 单例设计模式
请问什么是单例设计模式?在开发中它的好处以及作用是什么?
作者: 一直在路上    时间: 2013-5-6 10:12
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。

另外方面,Singleton也能够被无状态化。提供工具性质的功能,

Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。
单例模式的两种方式:
  1. public class Singleton {

  2.   private Singleton(){}

  3.   //在自己内部定义自己一个实例,是不是很奇怪?
  4.   //注意这是private 只供内部调用

  5.   private static Singleton instance = new Singleton();

  6.   //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  7.   public static Singleton getInstance() {
  8.     return instance;   
  9.    }
  10. }
复制代码
第二种方法:
  1. public class Singleton {

  2.   private static Singleton instance = null;

  3.   public static synchronized Singleton getInstance() {

  4.   //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  5.   //使用时生成实例,提高了效率!
  6.   if (instance==null)
  7.     instance=new Singleton();
  8.   return instance;   }

  9. }
复制代码

作者: chensc    时间: 2013-5-6 10:13
学习学习!
作者: 宋晓明    时间: 2013-5-6 10:15
尹桥印 发表于 2013-5-6 10:03
先占楼~~
就是一个类中创建这一个对象呐,创建多个对象是不允许的
每台计算机可以有若干通信端口,系统应当 ...

那意思就是说,单例设计模式就是避免端口被使用中以外的程序同时使用?假如其他程序用到此端口,会产生什么状况?
作者: 白磊    时间: 2013-5-6 10:18
java中单例模式是一种常见的设计模式,懒汉式单例、饿汉式单例
  单例模式有一下特点:
  1、单例类只能有一个实例。所以构造方法应该私有,保证外部无法创建创建类实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。通过一个public的过的对象实例的方法。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免多出头。
作者: 宋晓明    时间: 2013-5-6 10:26
一直在路上 发表于 2013-5-6 10:12
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立 ...

:victory:用代码讲解很详细明了,学习了!
作者: 宋晓明    时间: 2013-5-6 10:28
尹桥印 发表于 2013-5-6 10:19
就是用了单例模式,这个一类只能有这一对象,不能有其他的对象。它可以在不建立直接关联的条件下让多个 ...

那个端口只是举个形象的例子说明呗,跟这个设计模式没有关系啊!了解!
作者: 飘哥1988    时间: 2013-5-6 10:55
单例设计模式:
1设计模式;解决某类问题行之有效的方法,是一种思想,规律的总结
2用来保证某个类在内存中只有一个对象
3保证唯一性的思想及步骤 (1)为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化
                   (2)为了其他程序访问到该类对象,须在本类中创建一个该类私有对象
                   (3)为了方便其他程序访问到该类对象,可对外提供一个公共访问方式
4单例设计模式的两种方式
                A:饿汉式 当类加载的时候,就创建对象。       
                class Student
                {
                        private Student(){}
                       
                        private static final Student s = new Student();
                       
                        public static Student getInstance()
                        {
                                return s;
                        }
                }
                B:懒汉式 当使用的使用,才去创建对象。
                class Student
                {
                        private Student(){}

                        private static final Student s = null;
                       
                        public static Student getInstance()
                        {
                                if(s==null)
                                {
                                   s = new Student();
                                }
                                return s;
                        }
                }

作者: ミ后来我经过梵    时间: 2013-5-6 10:56
你看一下就了解了
http://bbs.itheima.com/forum.php ... mp;page=1#pid314897




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2