再来一遍吧,实现单态的步骤,之前是在半迷糊的状态下写的,比较符合认知单态模式的思维顺序,有些混乱。那我在进行一下总结性描述。核心步骤是先关上所有的门,再打开一扇一次性的门来实现。
所谓关上所有的门是指将构造方法封装(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;
- }
- }
复制代码 |