黑马程序员技术交流社区
标题:
生动讲述 何为单例 学习分享
[打印本页]
作者:
heheka123
时间:
2014-3-29 20:11
标题:
生动讲述 何为单例 学习分享
再来一遍吧,实现单态的步骤,之前是在半迷糊的状态下写的,比较符合认知单态模式的思维顺序,有些混乱。那我在进行一下总结性描述。核心步骤是先关上所有的门,再打开一扇一次性的门来实现。
所谓关上所有的门是指将构造方法封装(private)以阻止外部可对类随意的实例化。
打开一扇门,是指在内部对类实例化,通过一个静态方法将实例化的值返回,再通过类对静态方法的访问把实例化的值赋给一个变量,这样我们就实现了再次打开门的功能,然而在次数上没有限定,如何来判断开门的次数呢,那我们可以通过找出被初始化后发生变化的一个值入手,一旦被实例化就发生了变化,再次访问时也还保留了上次的变化,这里就需要一个很重要的知识点静态变量,我们知道当函数再次运行时静态变量会续接前次结果继续运算,我们可以把内部实例化的对象值赋给一个初始值为空的静态变量,那样我们就做出了分别,未被初始化时值是空的,初始化之后就有了对象的值,废话不多说了看代码自己体会吧。
class Single{
private static Single s =null;
private Single(){}
public static Single getInstance(){
if(s==null){
synchronized(Single.class){
if(s==null){
s = new Single();
}
}
}
return s;
}
}
//饿汉式
class Single{
private static final Singel s = new Single();
private Singel(){}
public static Single getInstance(){
return s;
}
}
复制代码
作者:
syusikoku
时间:
2014-3-29 21:52
兄弟你标记错了。你标记的饿汉式应该是懒汉式也叫饱汉式,而没有标记的那个才叫饥汉式也叫饿汉式。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2