简述
单例模式(Singleton Pattern)是设计模式中最简单的形式之一,其目的是使得类的一个对象成为系统中的唯一实例。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象。
要点
单例模式的要点有三个:
单例类有且仅有一个实例
单例类必须自行创建自己的唯一实例
单例类必须给所有其他对象提供这一实例
从具体实现角度来说,可分为以下三点:
提供一个 private 构造函数(防止外部调用而构造类的实例)
提供一个该类的 static private 对象
提供一个 static public 函数,用于创建或获取其本身的静态私有对象(例如:GetLogger())
懒汉式单例:
Lazy 初始化
非多线程安全
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁(在“线程安全”部分分享如何加锁)才能保证单例,但加锁会影响效率。
饿汉式单例:
非 Lazy 初始化
多线程安全
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。