一、什么叫单例模式
单例模式是一种常用的软件设计模式。该模式的作用就是产生一个唯一的实例。也就是说通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。单例模式有如下特点:
- 单例类只可有一个实例
- 单例类必须自己创建自己这惟一的实例
- 单例类必须给所有其他对象提供这一实例
二、单例模式的实现
这里使用java实现。安装创建的方式不同,单例模式有2种实现。一种被称为饿汉式,另外一种被称为懒汉式。
1、饿汉式
1 package com.test.demo; 2 3 /** 4 * 单例模式 5 * 6 */ 7 public class Singleton { 8 private Singleton() {//私有化构造方法,禁止类外调用 9 } 10 11 private static Singleton singleton = new Singleton(); 12 13 public static Singleton getInstance() {//static 直接在通过类名调用 14 return singleton; 15 } 16 17 public static void main(String[] args) { 18 System.out.println(Singleton.getInstance() == Singleton.getInstance()); 19 } 20 }
饿汉式,当类被加载后,立即创建一个实例。
2、懒汉式
1 package com.test.demo2; 2 3 /** 4 * 单例模式 5 * 6 */ 7 public class Singleton { 8 private Singleton() {//私有化构造方法,禁止类外调用 9 } 10 11 private static Singletonsingleton; 12 13 public static synchronized Singleton getInstance() {//static 直接在通过类名调用,加锁防止两个线程同时进入的时候创建两个不一样的实例 14 if (singleton == null) 15 singleton = new Singleton2(); 16 return singleton; 17 } 18 19 public static void main(String[] args) { 20 System.out, 21 .println(Singleton.getInstance() == Singleton.getInstance()); 22 } 23 }
懒汉式,当类被加载后,先不创建。当调用getInstance方法时,在方法里面判断是否已经创建了一个实例,若没有,则创建;若有则不创建,直接将实例返回。