所谓单例模式,就是整个应用中会让某个实例只有一个。
单例模式有饿汉模式和懒汉模式两种,懒汉模式加载类时比较快,因为加载类的时候不会使用构造器,而饿汉模式加载类时就会直接使用构造器获取一个对象。但是这样运行时获取对象的速度饿汉模式就会更快些,因为他已经加载好了,直接获取即可。
MySingleton.java package com.muggle.MySin; //恶汉模式 public class MySingleton { private MySingleton() { // TODO Auto-generated constructor stub } private static MySingleton instance=new MySingleton(); public static MySingleton getInsatance() { return instance; } } MySingleton2.java package com.muggle.MySin; //懒汉模式 public class MySingleton2 { private MySingleton2() { // TODO Auto-generated constructor stub } private static MySingleton2 instance; public static MySingleton2 getInstance() { if(instance==null) { instance=new MySingleton2(); } return instance; } } TestDrive.java package com.muggle.MySin; public class TestDrive { public static void main(String[] args) { MySingleton s1=MySingleton.getInsatance(); MySingleton s2=MySingleton.getInsatance(); if(s1==s2) { System.out.println("------这是饿汉模式!----"); } System.out.println(s1); System.out.println(s2); MySingleton2 s3=MySingleton2.getInstance(); MySingleton2 s4=MySingleton2.getInstance(); if(s3==s4) { System.out.println("------这是懒汉模式!----"); } System.out.println(s3); System.out.println(s4); } }
输出如下:
------这是饿汉模式!----
com.muggle.MySin.MySingleton@70dea4e
com.muggle.MySin.MySingleton@70dea4e
------这是懒汉模式!----
com.muggle.MySin.MySingleton2@5c647e05
com.muggle.MySin.MySingleton2@5c647e05
代码运行后发现s1和s2,s3和s4时同一个对象,也是实现了单例模式。