zoukankan      html  css  js  c++  java
  • 单例模式

    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());
         }
     }
  • 相关阅读:
    golang中的值传递和引用传递
    链表

    hashtable(哈希表)
    TAO: Facebook’s Distributed Data Store for the Social Graph. 论文阅读笔记(上)
    Skip Lists: A Probabilistic Alternative to Balanced Trees 跳表论文阅读笔记
    【译】如何实现一个现代化电子商城搜索?(一)
    Elasticsearch搜索资料汇总
    Python 按比例获取样本数据或执行任务
    Python 按分类样本数占比生成并随机获取样本数据
  • 原文地址:https://www.cnblogs.com/mcahkf/p/5163082.html
Copyright © 2011-2022 走看看