• Java设计模式(学习整理)---单例模式


    1、概念:

    java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
      单例模式有一下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

    2、举例说明:

    2.1懒汉式单例

     1 /**
     2  *    单例模式测试:
     3  *            ---懒汉模式
     4  * @author 小风微灵
     5  *
     6  */
     7 public class SingleMode {
     8     
     9     /*
    10      * 第一步:创建一个本身的私有对象:不初始化
    11      */
    12     private    static SingleMode single=null;
    13     
    14     /**
    15      * 第二步:私有化构造器:使得该类不能被new出对象
    16      */
    17     private SingleMode(){}
    18     
    19     /**
    20      * 第三步:一个静态的获取私有对象方法
    21      */
    22     public static SingleMode getInstance(){
    23         
    24         if(single==null){
    25             single=new SingleMode();
    26         }
    27         return single;
    28     }
    29 }

    2.2饿汉式单例

     1 /**
     2  *    单例模式测试:
     3  *            ---饿汉模式
     4  * @author 小风微灵
     5  *
     6  */
     7 public class SingleMode_EH {
     8     /*
     9      * 第一步:创建一个本身的私有对象:初始化
    10      */
    11     private    static SingleMode_EH single_=new SingleMode_EH();
    12     
    13     /**
    14      * 第二步:私有化构造器:使得该类不能被new出对象
    15      */
    16     private SingleMode_EH(){}
    17     
    18     /**
    19      * 第三步:一个静态的获取私有对象方法
    20      */
    21     public static SingleMode_EH getInstance(){
    22         
    23         return single_;
    24     }
    25 }

     2.3登记式单例

     1 package mode_single;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 /**
     7  *    单例模式测试:
     8  *            ---登记式单例模式
     9  * @author 小风微灵
    10  *
    11  */
    12 public class SingleMode_DJS {
    13     private static Map<String,SingleMode_DJS> map = new HashMap<String,SingleMode_DJS>();
    14     /**
    15      * 静态块:事先把实例存放在表Map中
    16      */
    17     static{
    18         SingleMode_DJS single = new SingleMode_DJS();
    19         map.put(single.getClass().getName(), single);
    20     }
    21     /**
    22      * 构造器:受保护
    23      */
    24      protected SingleMode_DJS(){}
    25      /**
    26       * 静态工厂方法,返还此类惟一的实例
    27       * @param name        Map集合中的实例"键":的名称
    28       * @return            返回登记式单例对象
    29       */
    30      public static SingleMode_DJS getInstance(String name) {
    31              if(name == null) {
    32                   name = SingleMode_DJS.class.getName();
    33               }
    34               if(map.get(name) == null) {
    35                    try{
    36                           map.put(name, (SingleMode_DJS) Class.forName(name).newInstance());
    37                       } catch (InstantiationException e) {
    38                           e.printStackTrace();
    39                       } catch (IllegalAccessException e) {
    40                           e.printStackTrace();
    41                       } catch (ClassNotFoundException e) {
    42                           e.printStackTrace();
    43                       }
    44                   }
    45                   return map.get(name);
    46      }
    47 }
  • 相关阅读:
    JSP脚本的9个内置对象
    JSP基础
    修改 MySQL Workbench editor的字体
    pb datawindow语法
    SqlServer 查询死锁,杀死死锁进程
    pb设计笔记
    sql server网络备份
    数据库设计
    各种默认回车提交表单
    jQuery选择器 (详解)
  • 原文地址:https://www.cnblogs.com/newwind/p/5652544.html
Copyright © 2020-2023  润新知