单例,相当于一个全局变量,在整个应用程序中保证只有一个类的实例存在。
线程池、数据库连接池、缓存、日志等对象常被设计成单例
实例:
1.懒汉式单例
/** * 懒汉式单例Singelton:是一种创建性模式,在运行期调用对外开发的方法getInstance时创建单例对象 * 确保每次只创建一个实例,并提供一个全局访问点 * * 缺陷:不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例(不推荐使用) * @author 魅力_小生 */ public class SingeltonTest01 { /** * 私有的静态属性(自身) */ private static SingeltonTest01 instance; /** * 私有构造,防止外部实例化 * * 但是:通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效 */ private SingeltonTest01(){ } /** * 单例获取方法 * 外部只能通过该方法获取类的实例 * @return instance实例对象 */ public static SingeltonTest01 getInstance(){ if(instance == null){ instance = new SingeltonTest01(); } return instance; } }
2.饿汉式单例
/** * 饿汉式单例 * * 饿汉式单例类.在编译期类初始化时,已经自行实例化,从始至终只有一个对象 * 线程安全,推荐使用 * @author 魅力_小生 */ public class SingeltonTest02 { /** * 创建私有静态的实例 */ private static SingeltonTest02 instance = new SingeltonTest02(); /** * 私有构造,防止外部实例化 */ private SingeltonTest02(){ } /** * 静态工厂方法,返回实例 * @return */ public static SingeltonTest02 getInstance(){ return instance; } }
时间: 2024-10-08 14:54:39