![](https://source.unsplash.com/random/1680x200) ## 单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。 **这样的模式有几个好处:** 1. 在内存中只有一个对象,节省内存空间。 2.  避免频繁的创建销毁对象,可以提高性能。 3. 避免对共享资源的多重占用。 4. 可以全局访问 **适用场景:** * 需要频繁实例化然后销毁的对象。 * 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 * 有状态的工具类对象。 * 频繁访问数据库或文件的对象。如:redis * 以及其他要求只有一个对象的场景 **UML图** ![](https://img.kancloud.cn/89/3d/893de05d8e041d17a4fab466ba40b5eb_550x273.jpg) **简单实例** ``` final class BaseRedis { /** * @var \Redis 实例 */ private static $_instance; /** * 防止使用 new 创建多个实例 * BaseRedis constructor. */ private function __construct(){} /** * @return \Redis */ public static function getInstance() { if (!(static::$_instance instanceof \Redis)) { static::$_instance = new \Redis(); } return static::$_instance; } /** * @Desc: 防止 clone 多个实例 */ private function __clone() { trigger_error('Clone is not allow', E_USER_ERROR); } /** * @Desc: 防止反序列化 */ private function __wakeup(){} } ``` **使用** ``` $redis = BaseRedis::getInstance(); $redis->connect('127.0.0.1',6379); $redis->auth('123456'); $redis->set('name','Tinywan'); ```