黑马程序员技术交流社区
标题: 关于单例的实际应用问题 [打印本页]
作者: 刘源 时间: 2012-8-25 11:17
标题: 关于单例的实际应用问题
本帖最后由 刘源 于 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;
}
这个代码分开看都明白了,但合在一起就搞不懂了。
为什么这个类就要设计成单例呢,一般类不行吗?
我问的不是如何设计成单例,而是为什么要设计成单例模式。比如说,什么情况下要设计成单例,最好有个现实点的例子。
作者: 夏天 时间: 2012-8-25 11:32
单例设计模式是为了保证一个类在内存的对象唯一性。 也就是这个类只能创建一个对象。
比如你定义一个SuperMan类,你为了保证全球只有一个超人,所以就可以用单例设计模式。
思想:
如何能保证一个类在内存中只有一个对象?
1,不让其他程序创建该类对象。因为这样不可以控对象的数量。
2,在本类中自定义本类对象。自己创建。
3,对外提供已创建好的对象。
步骤:
1,将构造函数私有化。 这样其他程序就无法创建对象了,因为无法初始化。
2,在本类中建立一个本类对象。
3,对外提供方法对该对象进行获取。
所以你的单例类 按以上三部来执行的!
作者: 郑世光 时间: 2012-8-25 13:35
单例很好理解啊,它和一般的类的区别就是:单例只能有一个对象。
1,将构造函数私有化。 private SequenceGenerator(){}
2,在类中创建一个本类对象。 private static SequenceGenerato s = new SequenceGenerato();
3,提供一个方法可以获取到该对象。
public static SequenceGenerato getInstance()
{
return s;
}
要创建对象就调用静态方法getInstance。其他的使用都和一般类相同。
作者: 唐见 时间: 2012-8-25 14:27
单列的设计上面楼层已经讲的很清楚了。有时我们会反复用到同一个类的事例,而每创建一次,开销又会很大,如用jdbc获取与数据库的链接时,所用的开销就会很大,我们不可能反复的去建立链接,这时用单列模式只创建一个,以后都用该对象来操作数据库,就可以大大的降低系统消耗。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |