A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王章亚 中级黑马   /  2012-5-29 17:50  /  2093 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例模式分为(懒汉式,饿汉式)
懒汉式(对象的延迟加载)
Public class Student{
        Private  Student(){}
Private  static  Student stu=null;
Public  static  Student  getInstance(){
        If(stu!=null)
Stu=new Student();
else
        Return  stu;
}
}
饿汉式
Public class Student{
        Private  Student(){}
Private  static  Student stu=new Student();
Public  static  Student  getInstance(){
        Return  stu;
}
}
一般开发的时候都是采用饿汉式,因为懒汉式存在着隐患要想解决就用双重判断+同步线程就行了代码如下:
Public class Student{
        Private  Student(){}
Private  static  Student stu=null;
Public  static  Student  getInstance(){
        If(stu==null)
{
                 Synchronized(Student.class)
{
        If(stu==null)
        Stu=new Student();
}
}
        Return  stu;
}
代码能看懂,不知道单例模式一般都用在什么时候,求深刻理解????

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
什么情况下使用单例模式
单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:
第一、控制资源的使用,通过线程同步来控制资源的并发访问;
第二、控制实例产生的数量,达到节约资源的目的。
第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源。软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的。当然,使用数据库连接池还有很多其它的好处,可以屏蔽不同数据数据库之间的差异,实现系统对数据库的低度耦合,也可以被多个系统同时使用,具有高可复用性,还能方便对数据库连接的管理等等。数据库连接池属于重量级资源,一个应用中只需要保留一份即可,既节省了资源又方便管理。所以数据库连接池采用单例模式进行设计会是一个非常好的选择。
在我们日常使用的在Windows中也有不少单例模式设计的组件,象常用的文件管理器。由于Windows操作系统是一个典型的多进程多线程系统,那么在创建或者删除某个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象。采用单例模式设计的文件管理器就可以完美的解决这个问题,所有的文件操作都必须通过唯一的实例进行,这样就不会产生混乱的现象。
再比如,每台计算机可以有若干个打印机,如果每一个进程或者线程都独立地使用打印机资源的话,那么我们打印出来的结果就有可能既包含这个打印任务的一部分,又包含另外一个打印任务的一部分。所以,大多数的操作系统最终为打印任务设计了一个单例模式的假脱机服务Printer Spooler,所有的打印任务都需要通过假脱机服务进行。
实际上,配置信息类、管理类、控制类、门面类、代理类通常被设计为单例类。像Java的Struts、Spring框架。

其实这些设计模式只用在你有了实际应用的时候会深刻理解它的用处。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 黑马—陈磊 于 2012-5-29 18:05 编辑

说说我的简单理解:当你要控制某个类在内存中实例个数只能有一个时的一种控制方法。
有很多时候必须要创建一个对象,并且不能创建多个,用单例就为了防止创建多个对象。
比方说一个学校只有一个校长,不能有两个,有两个也出问题了,像校长这个类就必须做成单例的。
单例模式是一种设计模式,只能创建一个对象。
回复 使用道具 举报
如果一个类在内存只存在一个对象, 为了保证对象唯一性,就可以用单例模式.
不知道算不算深刻,{:soso_e113:}
回复 使用道具 举报
单例模式:解决一个类在内存中只存在一个对象。
想要保证对象唯一。
1.        为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象。
2.        还为了让你其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.        为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
比如Runtime对象就是一个单例模式。你可以查看API.了解一下。
回复 使用道具 举报
如果是开发的话,在封装隔离这个功能上利用工厂模式和单例模式结合用的比较多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马