黑马程序员技术交流社区
标题:
单利设计模式的问题
[打印本页]
作者:
李东梁
时间:
2014-3-24 19:21
标题:
单利设计模式的问题
本帖最后由 李东梁 于 2014-3-25 10:49 编辑
class Single
{
//2,自定义一个本类对象。
private static Single s = new Single();
//1,私有化构造函数。
private Single(){}
//3,定义一个方法返回该对象。让其他程序通过这个方法就可以获取该对象。
public static Single getInstance()
{
System.out.println("s="+s);
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
System.out.println("s1="+s1);
}
}
复制代码
老毕讲的单例设计步骤:
1,不让其他程序创建该类对象。
2,在本类中自己创建一个本类对象。
3,对外还提供一个获取该对象的方法。
为什么成员被设置成静态的了?
作者:
赵彦丰
时间:
2014-3-24 19:47
方法被访问只有两种方式,对象调用和类名调用,单例中没有对象了,只有类名调用,所以只能方法必须静态。
静态方法访问的也必须是静态成员。
作者:
透过生活
时间:
2014-3-24 20:26
既然私有化构造函数,不能创建对象。所以用静态就能通过类名调用。
作者:
追逐
时间:
2014-3-24 20:50
因为单例设计模式是无法new 对象的。所以对外提供的调用本类对象的方法必须用类名去调用。而可用被类名直接调用的只有静态方法或者静态函数。给成员变量加静态,是因为静态方法中只能调用静态函数。如果private static Single s = new Single(); 不被静态的话。在单例中的静态函数中是无法调用它的。所以。自己建立本类对象。必须要加静态。如果不加静态的话。就无法在对象被本类私有化后往外提供使用本类对象的方法。那么你设计的单例中的所有对象都无法被外部访问。你的程序也就没有任何意义了
作者:
Teale
时间:
2014-3-24 21:00
你看哦。。。这个方法调用时没有传入任何参数。。 那你获得它的时候,那个对象从哪里来呢? 所以说里面肯定有个成员变量,返回的是成员变量。 那如果不定义成static 静态的, 每一次调用这个方法时,会创建新的成员变量给调用的那个对象,这样就不是单例模式了。。。 static 的作用就是这个成员变量一创建就是唯一的,不管多少个对象调用它,都是返回的这个成员变量(内存中的地址都是一样的)
作者:
橸瑩膤漃寞林
时间:
2014-3-24 21:19
public static Single getInstance()这句话怎么访问?方法被调用只有两种方式,1、要么对象2、要么类名,现在没有对象,就用类名调用,能用类名调用,这方法必须是静态,静态方法访问静态成员,private static Single s = new Single();所以成员变量要是静态的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2