博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java单例模式
阅读量:2062 次
发布时间:2019-04-29

本文共 2300 字,大约阅读时间需要 7 分钟。

Java单例模式

概念:

  java中单例模式是一种常见的设计模式,单例模式分三种:懒汉模式单例、饿汉模式单例、登记模式的那里三种。

  单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

1.饿汉式单例类

 

1 //饿汉式单例类.在类初始化时,已经自行实例化  2  public class Singleton1 { 3      //私有的默认构造子 4      private Singleton1() {} 5      //已经自行实例化  6      private static final Singleton1 single = new Singleton1(); 7      //静态工厂方法  8      public static Singleton1 getInstance() { 9          return single;10      }11  }

 

2.懒汉式单例类

 

1 //懒汉式单例类.在第一次调用的时候实例化  2  public class Singleton2 { 3      //私有的默认构造子 4      private Singleton2() {} 5      //注意,这里没有final     6      private static Singleton2 single=null; 7      //静态工厂方法  8      public synchronized  static Singleton2 getInstance() { 9           if (single == null) {  10               single = new Singleton2();11           }  12          return single;13      }14  }

 

3.登记式单例类

 

1 import java.util.HashMap; 2  import java.util.Map; 3  //登记式单例类. 4  //类似Spring里面的方法,将类名注册,下次从里面直接获取。 5  public class Singleton3 { 6      private static Map
map = new HashMap
(); 7 static{ 8 Singleton3 single = new Singleton3(); 9 map.put(single.getClass().getName(), single);10 }11 //保护的默认构造子12 protected Singleton3(){}13 //静态工厂方法,返还此类惟一的实例14 public static Singleton3 getInstance(String name) {15 if(name == null) {16 name = Singleton3.class.getName();17 System.out.println("name == null"+"--->name="+name);18 }19 if(map.get(name) == null) {20 try {21 map.put(name, (Singleton3) Class.forName(name).newInstance());22 } catch (InstantiationException e) {23 e.printStackTrace();24 } catch (IllegalAccessException e) {25 e.printStackTrace();26 } catch (ClassNotFoundException e) {27 e.printStackTrace();28 }29 }30 return map.get(name);31 }32 //一个示意性的商业方法33 public String about() { 34 return "Hello, I am RegSingleton."; 35 } 36 public static void main(String[] args) {37 Singleton3 single3 = Singleton3.getInstance(null);38 System.out.println(single3.about());39 }40 }

转载地址:http://fwolf.baihongyu.com/

你可能感兴趣的文章
UDP连接和TCP连接的异同
查看>>
hibernate 时间段查询
查看>>
java操作cookie 实现两周内自动登录
查看>>
Tomcat 7优化前及优化后的性能对比
查看>>
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
被废弃的dispatch_get_current_queue
查看>>
什么是ActiveRecord
查看>>
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>
Windows7中IIS简单安装与配置(详细图解)
查看>>
linux基本命令
查看>>