本文共 1491 字,大约阅读时间需要 4 分钟。
单例模式要求一个类只能生成一个对象。开发者可以通过定义一个私有访问权限的构造函数,来避免被其他类new
出一个对象,其他类对该类的访问可以通过getInstance
获得同一个对象。
单例模式根据申请对象的时机可分为饿汉式单例与懒汉式单例,其中,饿汉式单例在程序启动就申请对象;懒汉式单例在其他类获取单例时申请对象。需要注意的是,懒汉式单例还需要考虑多线程同时调用getInstance
方法的影响。
饿汉式单例:
package com.sigalhu.singleton;public class Singleton { private static final Singleton singleton = new Singleton(); //限制产生多个对象 private Singleton(){} //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量是static public static void daSomething(){ }}
线程不安全的懒汉式单例:
package com.sigalhu.singleton;public class Singleton { private static Singleton singleton = null; //限制产生多个对象 private Singleton(){} //通过该方法获得实例对象 public static Singleton getSingleton(){ if(singleton == null){ singleton = new Singleton(); } return singleton; }}
线程安全的懒汉式单例:
package com.sigalhu.singleton;public class Singleton { private static Singleton singleton = null; //限制产生多个对象 private Singleton(){} //通过该方法获得实例对象 public static Singleton getSingleton(){ if(singleton == null){ synchronized (Singleton.class){ if(singleton == null){ singleton = new Singleton(); } } } return singleton; }}
mock
的方法虚拟一个对象;