【设计模式】——单例

来源:互联网 发布:美国退出qe 知乎 编辑:程序博客网 时间:2024/06/10 18:40

        单例模式在实际开发中比较常用,之前接触中只了解懒汉式和饿汉式,而单例的实现一共包含饿汉和懒汉在内一共是5中实现方式,为了一目了然部分实现直接上图片。

1、饿汉式(左侧)

2、懒汉式(右侧)


两者实现的不同,直接反应到使用上:

        ①饿汉式的实例,在类初始化时直接完成实例化,不支持延时加载,懒汉式相反。

        ②饿汉式的访问接口没有进行同步控制,所以调用效率高,懒汉式相反。


3、静态内部类



        静态内部类结合了饿汉和懒汉的优点:可延时、线程安全、调用效率高。


        ①可延时:对象的实例化放在了静态内部类中,类在进行初始化时不会执行到静态内部类,只有在调用getInstance()方法时才会执行静态内部类的方法,实现对象的实例化

        ②内部类的加载过程是天然线程安全的

        


4、枚举类实现单例


        优点:简单、线程安全、调用效率高。

        缺点:不能实现延时

5、Double Check


        缺点:JVM底层内部模型原因,偶尔会出问题,不建议使用(具体原因不详)。


总结

        频繁调用的建议使用调用效率高的,如果创建代价大建议使用可延时的。

        不需要延时的:枚举 好于 饿汉

        需要延时的:静态内部类 好于 懒汉式


可下载测试代码。(http://download.csdn.net/detail/u013030682/9884459)