多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 概述 在应用程序调用的时候,只能获得一个对象实例。单例模式被公认为是 反面模式,为了获得更好的可测试性和可维护性,请使用依赖注入模式。 ### 优点 1. 提供了对唯一实例的受控访问。 2. 由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。 3. 允许可变数目的实例。 ### 缺点 1. 由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。 2. 单例类的职责过重,在一定程度上违背了“单一职责原则”。 3. 滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状 态的丢失。 ### 实例 ~~~ class Singleton{ private static $instance; private function __construct(){} private function __clone(){} private function __wakeup(){} public static function getInstance() { if(!self::$instance instanceof self){ self::$instance = new self(); return self::$instance; } return self::$instance; } } ~~~