博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(第一式:单例模式)
阅读量:5287 次
发布时间:2019-06-14

本文共 1779 字,大约阅读时间需要 5 分钟。

概念:

    单例模式:确保一个类只有一个实例化对象。即就是一个系统中只有一个实体对象。
    在单例模式中又分为两种模式:饿汉式单例和懒汉式单例。
        饿汉式单例:在类加载的时候初始化实例。
        懒汉式单例:在第一次引用的时候初始化实例。
实现:
    饿汉式单例:

1         public class HungrySingleCase { 2             //私有化构造方法 3             private HungrySingleCase(){} 4             //在内部实例化对象,静态保证了在该类家在的时候会执行一次,且仅执行一次。同样私有化是我们通常习惯暴露get方法对外提供访问。 5             private static HungrySingleCase singleCase = new HungrySingleCase(); 6             //提供get方法 7             public static HungrySingleCase getSingleCase(){ 8                 return singleCase; 9             }10         }

    懒汉式单例:

1         public class SluggardSingleCase { 2             //私有化:不允许外部new该对象 3             private SluggardSingleCase(){} 4             //私有:习惯上我们只提供get方法访问对象。静态:加载但我们并不初始化,因为我们需要它在第一次引用时实例化,而不是类加载时实例化。 5             private static SluggardSingleCase sluggardSingleCase = null; 6             //添加同步,防止在第一次引用时多线程并发,可能会出现多个实例对象。提供get方法。 7             synchronized public static SluggardSingleCase getSingleCase(){ 8                 //判断该对象是否为null,本质是判断否第一次引用 9                 if (sluggardSingleCase == null){10                     sluggardSingleCase = new SluggardSingleCase();11                 }12                 return sluggardSingleCase;13             }14         }

分析:上面的实现中,我也尽可能的简单明了的写了注释,接下里我们更详细的分析一下单例模式。

    1.单例就必然得私有化构造方法,其中提供的get方法必然是静态的,那么它所用的变量或者别的方法也必然是静态的。
    2.饿汉式单例是使用语言特性实现的单例模式,懒汉式单例主要是通过我们书写逻辑实现的单例模式。
    3.从实现上分析,饿汉式比懒汉式更占用内存资源。懒汉式比饿汉式更占用CPU资源。
    4.无论是哪种模式的单例,因为都是静态的原因,所以无论是它有父类或者有子类,就单例模式下都是没有意义的。所以也就基本不存在扩展。
    5.单例固然整个系统中就只有一个,而且一般对于工具类或者可共享的都是整个系统就一个,可以免去很多比必要的创建对象和销毁对象,从而提升系统性能。
    6.适合单例的场景:
        a.整个系统中只需要一个
        b.创建对象需要的资源比较多,对象并不要求每次都是新对象。如IO对象或数据库访问对象。
        c.需要定义大量静态的工具类,或者本身工具类就也可以设计成单例。
        ……
经典框架中使用的:
    Spring框架中,管理Bean,默认生成的对象就是以单例模式生成;Struts2框架中,工厂对象基本都是使用单例模式生成。等等……

转载于:https://www.cnblogs.com/ben-mario/p/10643233.html

你可能感兴趣的文章
04-jQuery的属性操作
查看>>
response实现文件下载
查看>>
【WP7】页面之间数据交互
查看>>
C++中的unique函数
查看>>
小白学数据分析----->流失分析设计
查看>>
FontAwesome 奥森图标的学习
查看>>
request response cookie session
查看>>
NMON记录服务器各项性能数据
查看>>
未找到arm-linux-gcc解决办法
查看>>
统计Xcode项目代码行数
查看>>
认识 service worker
查看>>
第五次团队作业:项目展示
查看>>
C#面向对象(二):封装和继承
查看>>
range()函数
查看>>
少量标签下的模型
查看>>
HOJ-1005 Fast Food(动态规划)
查看>>
FasfDFS整合Java实现文件上传下载
查看>>
用Hadoop构建电影推荐系统
查看>>
[读码时间] 弹出层效果
查看>>
UVAL 4728 Squares(旋转卡壳)
查看>>