java单例模式
什么是单例模式:
保证一个类在程序的生命周期里只有一个实例,并提供该实例的全局访问方法。
单例的结构(三要素):
- 私有的静态实例对象private static instance
- 私有的构造函数private Singleton(){}
- 公共的、静态的、访问该实例对象的方法public static Singleton
单例模式的分类:
懒汉模式:
以时间换空间,当程序启动时并不在第一时间创造该实例的对象,只有当外部调用该实例对象时才会创建。
优点:当需要实例对象的时候才进行创建可以节约很多资源,体现出了延迟加载思想。
缺点:当在同一个时间点有多个线程调用生成实例的方法,那将会生成多个不同的实例,这样就无法保证生成实例的唯一性,想要同步实例,就要考虑到多线程竞争锁,这样会使得效率下降。
饿汉模式:
以空间换时间,当程序启动时不管外部有没有调用,都会创造出该实例的对象。
优点:即使在多线程的情况下也能保证实例的唯一性,效率较高。
缺点:程序启动就创建实例,如果在程序的运行中没有用到该实例,那么就消耗了系统的资源。
懒汉单例:
package com.singleton; /** *懒汉单例模式 */ public class LazySingleton{ /** * 私有化构造函数 */ private LazySingleton(){ System.out.println("生成懒汉模式的实例"); } /** * 私有静态实例变量 */ private static LazySingleton lasySingleton = null; /** * 获取该实例的公共的方法 * @return lasySingleton */ public static LazySingleton getLazySingleton(){ //判断实例是否已经创建,如果创建了就返回原来的实例,如果没有创建就创建新的实例 if(lasySingleton == null){ lasySingleton = new LazySingleton(); } return lasySingleton; } }
饿汉单例:
package com.singleton; /* * 饿汉单例模式 */ public class HungrySingleton { /** * 私有化构造方法 */ private HungrySingleton(){ System.out.println("生成饿汉单例模式"); } /** * 当程序启动时创建私有静态的饿汉实例 */ private static HungrySingleton hungrySingleton = new HungrySingleton(); /** * 公共静态的获取饿汉实例 */ public static HungrySingleton getHungrySingleton(){ return hungrySingleton; } }

浙公网安备 33010602011771号