初识Java设计模式之单例设计模式

来源:互联网 发布:关于电子商务的软件 编辑:程序博客网 时间:2024/06/06 14:25

问题的引出

   我们知道类的封装性不只体现在对属性的封装上,实际上方法也可以被封装,当然方法的封装也包括对构造方法的封装。如以下代码,就是对构造方法的封装。



一个类要想使用,则必须有实例化的对象产生,如果现在想调用Singleton类中的print方法,则一定要首先产生Singleton的实例化对象,但是由于此构造方法被私有化了,如果按照如下的程序编写,则肯定会出现错误。



程序编译时会出现以下的错误:




    以上在使用new关键字出现了错误,而声明对象时却没有任何错误,那么该如何解决以上错误呢?
   封装是指一切都外部不可见,那么就意味着外部根本就无法调用被封装的构造方法,既然外部不能调用,那么在内部呢?



   以上的程序编译后,没有任何问题,也就是说,此时重点是如何将内部的instance对象传递到类的外部去,这样外部就可以通过instance来实例化Singleton的对象。那么对象该如何取呢?下面具体分析。

问题解决


    我们知道static类型的属性可以由类名直接调用,所以此时可以将instance属性声明为static类型,这样可以通过类名称直接调用




程序运行结果:



虽然成功实例化并调用了print方法,但是这样做本身也存在问题,因为类中属性必须封装,所以此处instance属性必须进行封装,而封装之后必须通过方法取得,但因为instance属性为静态属性,此时必须声明一个静态方法,这样就可以通过类名直接调用。




程序运行结果:





程序的意义


   从以上代码中可以发现虽然声明了3个Singleton对象,但是实际上所有对象都只使用instance引用,也就是说,此时不管外面如何使用,最终结果也只是有一个实例化对象存在,大概意思如下图:





    在设计模式中这样的设计被称为单例设计模式,即无论程序怎样运行,Singleton类永远只会有一个实例化对象存在。
    实际上,我们见到的很多东西都属于这种设计,比如说windows系统桌面有一个回收站程序,除了桌面的回收站外,每个硬盘上也有一个回收站,实际上桌面的回收站与硬盘的回收站都是同一个,那么也就是说整个操作系统中只有一个回收站示例,各个地方只是引用此实例而已。
    

---------以上内容摘自《JAVA开发实战经典》 作者:李兴华。觉得写得很好,虽然只是个简单的介绍,起码让我对单例设计模式有个粗略的了解,于是就搬到博客上来了,希望对大家有所帮助。
     
0 0