单例模式保证了一个类的实例的全局唯一性。
饿汉模式的单例模式:
public class Singleton { //饿汉模式 private Singleton(){} //构造方法私有 private static Singleton singleton=new Singleton(); //在类内部创建实例对象 public static Singleton getSingleton(){ //对外提供一个获得该实例对象的公共接口 return singleton; } public static void main(String[] args) { Singleton singleton = getSingleton(); //获得实例对象 Singleton singleton1 = getSingleton(); //获得实例对象 System.out.println(singleton.hashCode()); //1836019240 System.out.println(singleton1.hashCode());//1836019240 } }
由于饿汉模式是不管程序是否需要该实例对象,都会进行创建,比较浪费资源。由此提出了懒汉模式。即就是:当程序中需要使用该实例对象时,才进行创建该实例对象。但此过程会涉及到多线程并发问题。
懒汉模式的单例模式:
public class Singleton_Lazy_Man { //构造方法私有 private Singleton_Lazy_Man(){} //声明一个全局唯一的实例对象,并未直接创建实例对象 private static Singleton_Lazy_Man singleton_lazy_man; //定义向外提供访问的共有接口,同时创建该唯一的实例对象 public static Singleton_Lazy_Man getSingleton_lazy_man(){ if(null==singleton_lazy_man){ //实例对象未创建时 synchronized (Singleton_Lazy_Man.class){ // if(null==singleton_lazy_man){ // singleton_lazy_man=new Singleton_Lazy_Man(); // } singleton_lazy_man=new Singleton_Lazy_Man(); } } return singleton_lazy_man; } public static void main(String[] args) { Singleton_Lazy_Man singleton_lazy_man = getSingleton_lazy_man(); Singleton_Lazy_Man singleton_lazy_man1 = getSingleton_lazy_man(); //打印发现 hashCode码是相同的 System.out.println(singleton_lazy_man.hashCode()); System.out.println(singleton_lazy_man1.hashCode()); } }
lk