单例模式学习(一)
什么是单例?为什么要用单例? 一个类被设计出来,就代表它表示具有某种行为(方法),属性(成员变量),而一般情况下,当我们想使用这个类时,会使用 new 关键字,这时候jvm会帮我们构造一个该类的实例。而我们知道,对于 new 这个关键字以及该实例,相对而言是比较耗费资源的。所以如果我们能够想办法在jvm启动时就 new 好,或者在某一次实例 new 好以后,以后不再需要这样的动作,就能够节省很多资源了。 哪些类可以使用单例? 一般而言,我们总是希望 无状态 的类能够设计成单例,那这个 无状态 代表什么呢? 简单而言,对于同一个实例,如果多个线程同时使用,并且不使用额外的线程同步手段,不会出现线程同步的问题,我们就可以认为是 无状态 的,再简单点:一个类没有成员变量,或者它的成员变量也是 无状态 的,我们就可以考虑设计成单例。 实现方法 好了,我们已经知道什么是单例,为什么要使用单例了,那我们接下来继续讨论下怎么实现单例。 一般来说,我们可以把单例分为 行为上的单例 和 管理上的单例 。 行为上的单例 代表不管如何操作(此处不谈cloneable,反射),至始至终jvm中都只有一个类的实例,而 管理上的单例 则可以理解为:不管谁去使用这个类,都要守一定的 规矩 ,比方说,我们使用某个类,只能从指定的地方’去拿‘,这样拿到就是同一个类了。 而对于 管理上的单例