单例模式

来源:互联网 发布:华数传媒网络怎么退订 编辑:程序博客网 时间:2024/06/07 03:05
单例模式作用:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式应该是23中设计模式中最简单的一种模式了。它有一下几个要素:
1.私有的构造方法。
2.指向自己实例的私有静态引用。
3.以自己实例为返回值的静态的公有的方法。


单例模式根据实例化对象时机的不同分为两种:饿汉式与懒汉式。

饿汉式单例在类被加载的时候,就实例化一个对象交给自己的引用;

而懒汉式在调用取得实例方法时才会实例化对象。


单例模式的优点:
1.在内存中只有一个对象,节省内存空间。
2.避免频繁的创建销毁对象,可以提高性能。
3.避免对共享资源的多重占用。
4.可以全局访问。

应用场景:
1.需要频繁实例化然后销毁的对象。
2.创建对象时耗时过多或者耗资源过多,但是又经常用到的对象。
3.有状态的工具类对象。
4.频繁访问数据库或文件的对象。
5.以及其他所有要求只有一个对象的场景

代码如下:

1.饿汉式

<pre name="code" class="java"><span style="font-size:14px;">public class Single{    private static Single single = new Single();    //创建本类对象,并私有化。    private Single(){}    //私有化构造函数,让外部不能访问。    public static Single getInstance(){    //对外提供方法获得本类对象。                return single;    }}</span>




懒汉式——一般

public class Single{    private static Single single = null;//不建立对象    private Single(){}    public static synchronized Single getInstance(){    //当方法被调用时才创建对象。        if(single == null)    //先判断是否为空           {                single = new Single();         }          return single;    }}


懒汉式②——利用双重判断,提高效率

public class Single{    private static Single single = null;//不建立对象    private Single(){}    public static  Single getInstance(){    //当方法被调用时才创建对象。        if(single == null)    //先判断是否为空   {synchronized(Single.class)if (single == null){single = new Single();}                         }          return single;    }}


 比较:
         饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
          懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
          开发时,常用第一种,但是面试的时候,通常会考第二种。






0 0
原创粉丝点击