单例设计模式之个人见解

来源:互联网 发布:seo站群计划书 编辑:程序博客网 时间:2024/04/30 05:53

    单例模式(Singleton):


单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

单例模式代码实现步骤:

1、将构造函数私有化。
2、在类中创建一个本类对象。
3、提供一个方法可以获取到该对象。
(对于事物怎么描述,还怎么描述。当需要将该事物的对象保证内存唯一时,将以上三部加上。)
Class SingLeton{//构造私有化private SingLeton(){}//创建实例private static SingLeton instance = new SingLetion();//获取实例的方法public static SingLetion getInstance(){return instance;}}

单例设计模式的特点:


1、为了避免其他程序过多建立该类对象。先禁止其他程序建立该对象。
2、还为了让其他程序可以访问到该类对象,只好自本类中,自定义一个对象。
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

单例设计模式两种实现方法:


1、饿汉式
Class SingLeton{//私有化构造方法,好在内部控制创建实例的数目private SingLeton(){}//定义一个变量来存储创建好的类实例,只会创建一次private static Singleton instance = new Singleton();//定义一个方法提供类的实例public static Singleton getInstance(){return instance;}}
2、懒汉式
Class SingLeton{//私有化构造方法,好在内部控制创建实例的数目private SingLeton(){}//定义一个变量来存储创建好的类实例,只会创建一次private static Singleton instance = null;//定义一个方法提供类的实例,为了保证线程安全安全需要加synchronizedpublic static synchronized Singleton getInstance(){//判断是否为空if(instance==null){//创建一个实例instance = new Singleton();}return instance;}}


线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。


两种模式的比较:

时间和空间:
懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直不使用实例,那就不会创建实例,从而节约了内存空间。饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,不用进行判断,直接返回类实例即可,节约了运行时间。
安全性:
从线程安全上来讲,不加同步的懒汉式是线程不安全的,懒汉式实现就是线程不安全的。饿汉式是线程安全的,因为虚拟机保证只装载一次,在装载类的时候是不会发生并发的。那么如何实现懒汉式的线程安全呢?只需要加上synchronized 关键字即可,但是这种写法有一个弊端,那就是每次调用这个getInstance()方法的时候都需要同步,影响性能。更好的方法是使用双重检查加锁机制。这种方法即能保证线程安全,又能够使性能不受太大影响。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月宝宝流鼻血怎么办 4个月宝宝流鼻血怎么办 20个月宝宝发烧流鼻血怎么办 60天宝宝老鼻塞怎么办 10个月宝宝头被撞到流鼻血怎么办 狗狗受凉吐了怎么办 狗狗咳嗽流鼻涕一直不好怎么办 宝宝感冒咳嗽流鼻涕发烧怎么办 狗狗感冒咳嗽流鼻涕怎么办 9岁儿童咳嗽鼻塞怎么办 三个月大的狗狗流鼻涕怎么办 3个月小狗干呕流鼻涕怎么办 狗狗流鼻涕怎么办有浓 小狗狗感冒了怎么办呢 狗狗一直擤鼻涕怎么办 小狗感冒流黄鼻涕怎么办 六个月宝宝鼻塞流鼻涕怎么办 小狗吃太多吐了怎么办 狗狗晕车一直吐怎么办 狗狗已经晕车了怎么办 狗狗得犬瘟怎么办 泰迪坐车吐了怎么办 小孩感冒流鼻涕带血怎么办 孩子鼻子流鼻涕有血丝怎么办 鼻子过敏流鼻涕有血丝怎么办 孕妇感冒头痛鼻涕带血怎么办 孕妇感冒鼻塞鼻涕带血怎么办 孕晚期感冒流鼻涕打喷嚏怎么办 孕晚期感冒鼻塞流鼻涕怎么办 怀孕初期鼻涕一直流怎么办 孩子一直流鼻水怎么办 9个月宝宝流鼻涕怎么办 8个月婴儿流鼻涕怎么办 3岁宝宝鼻塞咳嗽怎么办 又感冒又咳嗽了怎么办 鼻塞有一个月了怎么办 感冒一直流清水鼻涕怎么办 孩子受凉流清水鼻涕怎么办 一遇冷空气就打喷嚏流鼻涕怎么办 打喷嚏鼻塞流清鼻涕怎么办 哺乳期鼻子不通气有鼻涕怎么办