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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-8-25 11:17  /  1669 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-8-25 14:36 编辑

“问题已经解决”
第三:更实际的应用(在什么情况用单例)
public class SequenceGenerator{
//下面是该类自身的业务功能代码
private int count = 0;
public synchronized int getSequence(){
++count;
}
//下面是把该类变成单例的代码
private SequenceGenerator(){}
private final static instance = new SequenceGenerator();
public static SingleTon getInstance(){
return instance;
}
这个代码分开看都明白了,但合在一起就搞不懂了。
为什么这个类就要设计成单例呢,一般类不行吗?
我问的不是如何设计成单例,而是为什么要设计成单例模式。比如说,什么情况下要设计成单例,最好有个现实点的例子。

3 个回复

倒序浏览
单例设计模式是为了保证一个类在内存的对象唯一性。  也就是这个类只能创建一个对象。
比如你定义一个SuperMan类,你为了保证全球只有一个超人,所以就可以用单例设计模式。

思想:
如何能保证一个类在内存中只有一个对象?
1,不让其他程序创建该类对象。因为这样不可以控对象的数量。
2,在本类中自定义本类对象。自己创建。
3,对外提供已创建好的对象。

步骤:
1,将构造函数私有化。 这样其他程序就无法创建对象了,因为无法初始化。
2,在本类中建立一个本类对象。
3,对外提供方法对该对象进行获取。

所以你的单例类 按以上三部来执行的!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
单例很好理解啊,它和一般的类的区别就是:单例只能有一个对象。
1,将构造函数私有化。  private SequenceGenerator(){}
2,在类中创建一个本类对象。  private static SequenceGenerato s = new SequenceGenerato();
3,提供一个方法可以获取到该对象。
        public static  SequenceGenerato getInstance()
        {
                return s;
        }
要创建对象就调用静态方法getInstance。其他的使用都和一般类相同。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
单列的设计上面楼层已经讲的很清楚了。有时我们会反复用到同一个类的事例,而每创建一次,开销又会很大,如用jdbc获取与数据库的链接时,所用的开销就会很大,我们不可能反复的去建立链接,这时用单列模式只创建一个,以后都用该对象来操作数据库,就可以大大的降低系统消耗。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马