java设计模式之单例模式

   单例模式顾名思义,即为只有一个实例。然后,我们需要考虑如何才能保证一个类只有一个实例。也就是说,一个类能有一个对象,即只能被new一次。这样就可能会有人断言,那是不可能的,只要能new就会有多个对象。所以,我们需要解决的第一个问题就是如何控制对象的创建。

   1、控制对象的创建

   为了控制对象的创建,我们可以将其构造函数私有化。这样就只有我自己可以来构造我自己,其他人是没有权限的。我自己来构建自己那又怎么能保证在“别人”需要时,我已经将自己构建出来,并且可以给别人用能。所以,我们需要拥有一个静态的属性,这个属性就是我们自己。使用这个属性来保存我们自己。可以在适当的时候,将我们自己new出来,然后存储到这个属性里面。然后,我们就会遇到一个问题,就是怎么给别人?

   2、如何提供实例

   如果我们将指向自己的实例,的访问控制设置成public的。那么,我们就不能保证他的安全性,因为如果这样的话,就会有很多人都可以过来修改它。一旦修改了它,那么,如果再有人过来访问,那么就会出现很悲催的情况。所以,我们需要将这个属性设置为私有的即private的。然后,我们可以提供一个public的get方法来,保证大家都可以来访问这个属性。但是却不能修改这个属性。

   3、何时才是“适当的时候”?

   在解决第一个问题的时候,我们提出了一个适当的时候创建一个对象。那么,什么时候才是适当的时候呢?解决这个问题有两种解决方案:a、在创建这个类的时候,就将其对象实例化(这也就是传说中的饿汉模式)b、在需要的时候才创建,即在调用get方法是判断一下是否已经创建实例,如果已经创建那么直接返回,如果没有创建,那么创建一个实例并返回(这也就是传说中的懒汉模式)。

   饿汉模式和懒汉模式对于不同的语言,有不同的适应性。对于Java来说,饿汉模式是比较好的。而针对于C/C++来说懒汉模式比较好。这是语言本身所决定的。这也是大家为什么在看C/C++的书的时候,一般作者都是给出懒汉模式的实现,而不给出饿汉模式。而如何是看的java相关的书籍,那么,作者这一般就会紧紧给出一个饿汉模式的实现。因为在Java里面,双检查成例(这个是C/C++在解决懒汉模式对多线程环境的适应问题时,提出的比较成熟的解决方案)是不成立的。

   



本文出自 “技术成就梦想” 博客,转载请与作者联系!

你可能感兴趣的:(java,设计模式,单例模式,饿汉,懒汉)