• 单例模式


    Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”

    单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

    1.饿汉式单例类

     //饿汉式单例类.在类初始化时,已经自行实例化 
    public class Singleton1 {
          //私有的默认构造子
        private Singleton1() {}
         //已经自行实例化 
        private static final Singleton1 single = new Singleton1();
          //静态工厂方法 
        public static Singleton1 getSingle() {
              return single;
         }
      }

    2.懒汉式单例类

    //懒汉式单例类.在第一次调用的时候实例化 
     public class Singleton2 {
        //私有的默认构造子
         private Singleton2() {}
         //注意,这里没有final    
         private static Singleton2 single=null;
        //静态工厂方法 
         public synchronized  static Singleton2 getSingle() {
             if (single == null) {  
                 single = new Singleton2();
             }  
             return single;
          }
      }

    3.登记式单例类

    import java.util.HashMap;
     import java.util.Map;
     //登记式单例类.
     //类似Spring里面的方法,将类名注册,下次从里面直接获取。
     public class Singleton3 {
         private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
         static{
             Singleton3 single = new Singleton3();
             map.put(single.getClass().getName(), single);
         }
         //保护的默认构造子
         protected Singleton3(){}
         //静态工厂方法,返还此类惟一的实例
         public static Singleton3 getgetSingle(String name) {
             if(name == null) {
                 name = Singleton3.class.getName();
                 System.out.println("name == null"+"--->name="+name);
             }
             if(map.get(name) == null) {
                 try {
                     map.put(name, (Singleton3) Class.forName(name).newInstance());
                 } catch (InstantiationException e) {
                     e.printStackTrace();
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 } catch (ClassNotFoundException e) {
                     e.printStackTrace();
                 }
             }
             return map.get(name);
         }
         //一个示意性的商业方法
         public String about() {    
             return "Hello, I am RegSingleton.";    
         }    
         public static void main(String[] args) {
             Singleton3 single3 = Singleton3.getInstance(null);
             System.out.println(single3.about());
         }
     }
  • 相关阅读:
    IE9以上获取元素的写法
    struts2动态跳转action,修改和添加共用一个页面
    Struts2网页面传值两种方式
    hibernate方法中参数传入数组的查询方法
    获取当前泛型类的传入,BaseDaoImpl<T> implements BaseDao<T>
    .net 必看书籍1
    knockjs
    javascript 处理链接的多种方式
    ckeditor 工具栏的配置
    C# 针对文件夹的操作
  • 原文地址:https://www.cnblogs.com/mcahkf/p/5163082.html
Copyright © 2020-2023  润新知