Java设计模式之单例设计模式
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式分为懒汉模式和饿汉模式:
懒汉模式在程序在第一次调用实例化。是线程不安全的。但是可以通过改写方法使其安全。
饿汉模式在加载时即开始实例化,确保在调用时已经存在了实例。是线程安全的,但是内存开销似乎有点大。
懒汉式范例代码:
1 public class Singleton { 2 //私有化默认构造器 3 private Singleton() {} 4 private static Singleton single=null; 5 //静态工厂方法 6 public static Singleton getInstance() { 7 if (single == null) { 8 single = new Singleton(); 9 } 10 return single; 11 } 12 }
饿汉式范例代码:
1 public class Singleton { 2 private Singleton() {} 3 private static final Singleton single = new Singleton(); 4 public static Singleton getInstance() { 5 return single; 6 } 7 }
懒汉式线程安全改进,方法1:
1 public class Singleton { 2 //私有化默认构造器 3 private Singleton() {} 4 private static Singleton single=null; 5 //静态工厂方法(加上同步方法) 6 public static Singleton Synchronized getInstance() { 7 if (single == null) { 8 single = new Singleton(); 9 } 10 return single; 11 } 12 }
方法2:
1 public class Singleton 2 { 3 //私有化构造器 4 private Singleton(){} 5 //静态内部类 6 private static class SingletonHoledr(){ 7 private static final Singleton instance = new Singleton(); 8 } 9 //静态工厂方法 10 public static final Singleton getInstance(){ 11 return SingletonHoledr.instance; 12 } 13 }
一般本人比较钟情于用方法2。关于单例模式还有很多未涉及到。本文是本人学习笔记,如果引用请慎重。
还有如果哪位仁兄发现有错误的麻烦帮留个言,以便改正。