要实现一个单例模式,其中的规则与要求在不同的实际应用中会有所不同,但任何一个单例模式至少需满足以下三大点。
①必须有一个私有的静态变量指向本类自身:
a.私有的变量只能供自身调用。
b.静态的变量只能分配一次内存空间,以后这个空间地址不改变。
②必须有一个私有、参数为空的构造器:
a.私有的构造器只能供本类创建对象时调用。
b.本类以外的地方不能直接调用构造器来创建对象。
③必须有一个公有、静态的方法,返回自身实例:
a.此方法返回类的对象实例。
b.在任何地方均可调用此公有的方法。
c.可以通过“类名.方法名”的形式调用此静态方法。
下面来看一个最基本的单例模式的例子,通过分析此单例代码来加深对以上三大点的理解。(www.xing528.com)
单例模式_1
private static Singleton instance:
定义了一个私有的静态变量instance,此变量就是本类Singleton类型,满足第一点的要求。
private Singleton(){}:
定义了一个私有的构造方法,满足第二点要求。
public static Singleton getInstance(){return instance;}:
定义了一个公有的静态方法,此方法返回上面定义的instance实例,满足第三点要求。
满足了以上三点后,如何来保证任何地方、任何时候获取的都是同一个实例,即每个实例都指向同一内存空间?下面来对这个问题做必要的分析与讲解。
①instance是一个静态的变量,一旦分配内存空间后,其所占据的地址空间一直不会释放,直到整个程序退出运行。因为instance是静态变量,在Singleton类初始化时就通过new Singleton()得到了内存空间,以后一直不变。
②通过new的方式去创建对象,一定要调用本类对应的构造方法。由于Singleton类中的构造方法只有一个且是私有的,所以只能在本类的位置调用,其他的地方是无法调用这个构造方法的。换句话说,只有在Singleton类以内才能用new的方式去创建对象。
③既然无法通过new方式来创建Singleton类的对象,那么要怎样才能获取它的实例呢?这个责任由Singleton类中的getInstance()来实现。getInstance()是一个静态的方法,不需要通过对象,用类加方法名Singleton.getInstance()即可调用。调用此方法便可得到方法的返回值instance实例。在Singleton类以外的任何地方,都只能通过此方法来得到Singleton类的实例instance,而instance是早就定义好的,所以无论在何时何地,得到的都是同一个实例对象。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。