【设计模式】Java设计模式第二课之单例模式

来源:互联网 发布:网络兼职广告语 编辑:程序博客网 时间:2024/06/05 04:24

单例模式是自打我知道设计模式这个名词之后,第一个听说的一个具体的设计模式.它的使用情景是有一些关键性资源只允许产生一个实例.如果有多个实例产生的话,就会对我们的实际情况产生许多干扰.


以下是我在看书的过程中总结的几个要点:

  • 确保一个类只有一个实例,并提供一个全局访问实例.
  • 在Java中实现单例模式需要一个私有的构造方法,一个静态方法和一个静态实例.
  • 确定在性能和资源上的限制,然后小心的选择适当的方案来实现单例,以解决多线程问题(我们必须认定所有的程序都是多线程的)
  • 如果使用了多个类加载器,可能导致单例失效,产生多个实例
  • 单例模式分为两种:懒汉模式和饿汉模式
  • 懒汉模式:加载类的时候比较快,但是运行时获取对象的速度比较慢,因为在创建单例类的时候没有创建类的对象.是线程不安全的.要在getInstance()方法上加上syncronized关键字,如果为了效率的话需要加上双重锁定
  • 饿汉模式:加载类的时候比较慢,但是运行时获取对象的速度比较快.因为在创建单例类的时候创建了类的对象.是线程安全的.


以下是用Java实现的懒汉模式和恶汉模式的代码:


懒汉模式

public class LazySingleton {      //私有静态对象,加载时候不做初始化      private static LazySingleton m_instance = null;      //私有构造方法,避免外部创建实例      private LazySingleton(){}      //静态工厂方法,返回此类的唯一实例。当发现实例没有初始化的时候,才初始化。      synchronized public static LazySingleton getInstance(){          if (m_instance==null) {              m_instance = new LazySingleton();          }          return m_instance;      }  }  


饿汉模式

public class HungerSingleton {      //私有的唯一(static final)实例成员,在类加载的时候就创建好了单例对象      private static final HungerSingleton m_instance=new HungerSingleton();      //私有构造方法,避免外部创建实例      private HungerSingleton(){}      //静态工厂方法,返回此类的唯一实例      public static HungerSingleton getInstance(){          return m_instance;      }  }  


单例模式本身的代码量是很少的,但是代码量少并不代表它很简单,要想理解它的真正思想,还要多运用多思考.

0 0
原创粉丝点击