黑马程序员技术交流社区
标题:
单例模式
[打印本页]
作者:
飘落
时间:
2013-9-19 23:28
标题:
单例模式
本帖最后由 飘落 于 2013-9-20 12:25 编辑
class Singleton
{
private static Singleton s=new Singleton();
private Singleton(){}
public static Singleton getInstance()
{
return s;
}
}
复制代码
单例模式通常被写成上面那个样子,为什么不写成下面这个样子?
class Singleton
{
static final Singleton s=new Singleton();
private Singleton(){}
}
复制代码
这段代码既能达到单例的要求,代码量又少。
作者:
黄文伯
时间:
2013-9-20 00:55
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
作者:
潘才新
时间:
2013-9-20 02:19
达人就是将复杂的代码简练化
作者:
第一印象
时间:
2013-9-20 08:28
本帖最后由 第一印象 于 2013-9-20 08:30 编辑
你这么写是可以的,不过要加public哦:
class Singleton
{
public static final Singleton s=new Singleton();
private Singleton(){}
}
复制代码
这样写就类似于枚举类型了,并且该枚举只有一个值,是完全没有问题的,因为枚举也是实现单例的一种手段,但是如果我想在将对象提供给调用者之前做一些判断和限制,这个就没办法完成了,只能用下面的方式:
class Singleton
{
private static Singleton s=new Singleton();
private Singleton(){}
public static Singleton getInstance()
{
//逻辑代码块
return s;
}
}
复制代码
作者:
王清华0
时间:
2013-9-20 10:07
如大神 第一印象 所说,确实是少了个public。试验完全可行
class HeiMa
{
public static void main(String[] args)
{
Singleton ss= Singleton.s;
System.out.println(ss.i);
}
}
class Singleton
{
public int i =20 ;
public static final Singleton s= new Singleton();
private Singleton(){}
}
复制代码
运行结果:
D:\workspace\day04>javac HeiMa.java
D:\workspace\day04>java HeiMa
20
D:\workspace\day04>
复制代码
作者:
straw
时间:
2013-9-20 12:38
这样也可以实现单列的功能!不过我个人不建议不这么做.
1,首先这不符合java的标准编码规范,就像一个javaBean一样,不会将属性值设成公共的,而是设成private又向外提供public方法去访问,这种设计模式安全性很高,因为外界只有通过方法间接访问权限.
2,再次是通过向外提供public方法才能访问方式还可在方法内部添加安全检测代码,使得程序运行起来就很安全.
比如:
public static Singleton newInstance(){
if(singleton==null)//确认对象是否为空
singleton=new Singleton();
return singleton;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2