🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> **设计模式-单例模式** ## 说明 ## **作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。** ---------- ##实现说明## 定义: 一个类 只能允许有 一个对象存在. 1.使类不能被实例化 2.创建一个允许外部访问的静态方法 3.在静态方法里实例化该类 4.禁止覆盖产生对象 5.禁止clone产生对象 <h5>常用场景</h5> > 在日常开发中缓存对象、日志对象、数据库操作对象等全局操作对象常被设计成单例。 ##单例模式实现过程## <h5>使类不能被实例化</h5> //封锁new方法 class sigle{ protected function __construct() { } } <h5>在静态方法里实例化该类</h5> class sigle{ protected function __construct() { } public static function getIns(){ return new self(); } } <h5>创建一个允许外部访问的静态方法</h5> class sigle{ protected static $ins = null; //存储类 protected function __construct() { } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>禁止覆盖产生对象</h5> //方法前加final,则方法不能呗覆盖,类之前加final,则类不能被继承 class sigle{ protected static $ins = null; final protected function __construct() { } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>防止clone产生新对象</h5> class sigle{ protected static $ins = null; //禁止外部直接创建对象,禁止继承后覆盖 final protected function __construct() { } //禁止外部直接clone对象,禁止继承后覆盖 final protected function __clone() { // TODO: Implement __clone() method. } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } <h5>测试</h5> class sigle{ protected static $ins = null; //禁止外部直接创建对象,禁止继承后覆盖 final protected function __construct() { } //禁止外部直接clone对象,禁止继承后覆盖 final protected function __clone() { // TODO: Implement __clone() method. } public static function getIns(){ if(self::$ins == null){ self::$ins = new self(); } return self::$ins; } } $s1=sigle::getIns(); $s2=sigle::getIns(); if($s1 === $s2){ echo "s1和s2是一个对象"; }else{ echo "s1和s2不是一个对象"; } 结果: object(sigle)#1 (0) { } object(sigle)#1 (0) { } s1和s2是一个对象 ## 结尾 ## <p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;"> 心如花木,向阳而生。 </p> [1]: https://blog.zxliu.cn/usr/uploads/2020/11/386091710.png [2]: https://blog.zxliu.cn/usr/uploads/2020/11/1966401635.png