java设计模式----单例模式

1.单例模式

  1.1.引言:据我了解,单例模式应该属于java设计模式中较为简单的一个设计模式,作为设计模式的开篇,先从简单入手,来慢慢理解设计模式。

  1.2.定义:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

2.单例模式的特点:

  2.1.类始终只能有一个实例。

  2.2.创建对象的操作需要由本类来完成。

  2.3.该类必须向外界暴漏一个能够访问该类实例的接口(方法).

3.创建单例模式的要点:

  3.1.私有构造方法。

  3.2.指向自己实例的私有静态引用。

  3.3.以自己实例为返回值的公有接口(方法)。

4.分类:

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

    4.1.1.代码实例:HSingleTon.java

 1 package com.cn.singleton;
 2 /**
 3  * 饿汉式单例类
 4  * @author Administrator
 5  *
 6  */
 7 public class HSingleTon {
 8 private static HSingleTon singleton = new HSingleTon();
 9 private HSingleTon(){}
10 public static HSingleTon getInstance(){
11     return singleton;
12 }
13 }
View Code

  4.2.懒汉式单例:懒汉式单例是在调用取得实例方法的时候实例化对象。

    4.2.1.代码实现:LSingleTon.java

 1 package com.cn.singleton;
 2 /**
 3  * 懒汉式单例模式
 4  * @author Administrator
 5  *
 6  */
 7 public class LSingleTon {
 8 private static LSingleTon singleton;
 9 private LSingleTon(){}
10 public static synchronized LSingleTon getInstance(){
11     if (singleton == null)
12         singleton = new LSingleTon();
13     return singleton;
14 }
15 }
View Code

  4.3.双重锁模式:这个模式将同步内容写到了if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了

    4.3.1.代码实现:DLSingleTon.java

 1 package com.cn.singleton;
 2 /**
 3  * 双重锁模式单例
 4  * @author Administrator
 5  *
 6  */
 7 public class DLSingleTon {
 8 private static DLSingleTon singleton;
 9 private DLSingleTon(){}
10 public static DLSingleTon getInstance(){
11     if (singleton == null){
12         synchronized (DLSingleTon.class) {
13             if (singleton == null)
14                 singleton = new DLSingleTon();
15         }
16     }
17     return singleton;
18 }
19 }
View Code

5.优缺点:

  5.1.优点:

    a.在内存中只有一个对象,节省内存空间。

         b.避免频繁的创建销毁对象,可以提高性能。

        c.避免对共享资源的多重占用。

        d.可以全局访问。

  5.2.缺点: 

    a.扩展困难,由于getInstance静态函数没有办法生成子类的实例。如果要拓展,只有重写那个类。

      b.隐式使用引起类结构不清晰。

        c.导致程序内存泄露的问题。

6.适用场景:

    a.需要频繁实例化然后销毁的对象。

           b.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。

           c.资源共享的情况下,避免由于资源操作时导致的性能或损耗等

             d.控制资源的情况下,方便资源之间的互相通信。

原文地址:https://www.cnblogs.com/g177w/p/8619732.html