【PHP设计模式 05_DanLi.php】单例模式
<?php /** * 【单例模式】 * 总结:防止外部new对象;防止子类继承;防止克隆。 */ header("Content-type: text/html; charset=utf-8"); /******* NO.1 普通的可以调用的类 ******/ //先定义一个类,实例化两次,看看是否全等(===) class sigleA{ } $sa1 = new sigleA(); $sa2 = new sigleA(); //注意:当两个对象是一个的时候,才会全等 //此处输出 “sa-不是一个对象” if($sa1 === $sa2){ echo 'sa-是一个对象<br>'; }else{ echo 'sa-不是一个对象<br>'; } /********************* NO.2 封锁new操作 ********************/ //getIns 预先判断实例 class sigleB{ protected static $ins = null; public static function getIns(){ //getIns 获取实例 if(self::$ins === null){ //把【自身对象】 赋给 一个自己的 【静态属性】 self::$ins = new self(); } return self::$ins; } //保护的 构造函数 protected function __construct(){ } } //再去判断两个对象 $sb1 = sigleB::getIns(); $sb2 = sigleB::getIns(); //此处输出 “sb-是一个对象” if($sb1 === $sb2){ echo 'sb-是一个对象<br>'; }else{ echo 'sb-不是一个对象<br>'; } ////----- 但是,下面用一个新的类继承自上面的 sigleB ... class multi extends sigleB{ public function __construct(){ } } $m1 = new multi(); $m2 = new multi(); //此处输出 “m-不是一个对象”,原因在于被继承后,__construct 被公开了 if($m1 === $m2){ echo 'm-是一个对象<br>'; }else{ echo 'm-不是一个对象<br>'; } /********************* NO.3 final防止继承 ********************/ class sigleC{ protected static $ins = null; public static function getIns(){ if(self::$ins === null){ self::$ins = new self(); } return self::$ins; } //若方法前加上final,则方法不能被覆盖; //若类前加上final,则类不能被继承 final protected function __construct(){ } //同样的,防止克隆(clone) final protected function __clone(){ } } $sc1 = sigleC::getIns(); $sc2 = clone $sc1; //被克隆了,又产生了多个对象; //如果没加上 防止克隆的代码,此处输出 “sc-不是一个对象” //上面加上了 final protected function __clone(),这里就会出错: //Fatal error: Call to protected sigleC::__clone() from context '' in ... if($sc1 === $sc2){ echo 'sc-是一个对象<br>'; }else{ echo 'sc-不是一个对象<br>'; }
【PHP设计模式 05_DanLi.php】单例模式的更多相关文章
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- php设计模式笔记:单例模式
php设计模式笔记:单例模式 意图: 保证一个类仅有一个实例,并且提供一个全局访问点 单例模式有三个特点: 1.一个类只有一个实例2.它必须自行创建这个实例3.必须自行向整个系统提供这个实例 主要实现 ...
- Java设计模式之《单例模式》及应用场景
摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6510196.html 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该 ...
- Java设计模式之【单例模式】
Java设计模式之[单例模式] 何为单例 在应用的生存周期中,一个类的实例有且仅有一个 当在一些业务中需要规定某个类的实例有且仅有一个时,就可以用单例模式 比如spring容器默认初始化的实例就是单例 ...
- Java设计模式中的单例模式
有时候在实际项目的开发中,我们会碰到这样一种情况,该类只允许存在一个实例化的对象,不允许存在一个以上的实例化对象,我们将这种情况称为Java设计模式中的单例模式.设计单例模式主要采用了Java的pri ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- IOS设计模式浅析之单例模式(Singleton)
说在前面 进入正式的设计模式交流之前,扯点闲话.我们在项目开发的过程中,经常会不经意的使用一些常见的设计模式,如单例模式.工厂方法模式.观察者模式等,以前做.NET开发的时候,认真拜读了一下程杰老师的 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式
PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...
随机推荐
- linux设备模型_转
建议原博文查看,效果更佳. 转自:http://www.cnblogs.com/wwang/category/269350.html Linux设备模型 (1) 随着计算机的周边外设越来越丰富,设备管 ...
- Winforms-GePlugin-Control-library
Winforms-GePlugin-Control-library http://download.csdn.net/download/xm379303813/4247029
- <s:select>中list获取action中数据
jsp: <s:select name="cate1.id" list="cate1list" listKey="id" listVa ...
- 让show parameter显示隐含参数(11G)
1.创建视图show_hidden_v$parameter create or replace view show_hidden_v$parameter (INST_ID, NUM , NAME , ...
- Oracle Flashback Technologies - 估算不同时间段闪回日志的产生量
Oracle Flashback Technologies - 估算不同时间段闪回日志的产生量 v$flashback_database_stat监控闪回数据的i/o开销的统计信息,根据之前的系统负载 ...
- Function call process
摘自自博客网址 http://www.cnblogs.com/bangerlee/archive/2012/05/22/2508772.html ax(accumulator): 可用于存放函数返回值 ...
- Eclipse 调试 Java 程序的技巧
- 断点视图 : 条件断点 如果你只对应用中的某部分感兴趣的话,这个功能非常有用.例如,如果你要在第13次循环的时候检查程序,或者在一个抽象父类中调试某些功能,而你只关注其中一个具体的实现.你可以在断 ...
- IOS推荐学习网站
1> 个人博客:技术大牛 唐巧:http://blog.devtang.com/blog/archives/ 王巍:http://www.onevcat.com 破船之家:http://beyo ...
- iOS 提交代码出现提示弹出框显示 “A commit message is required to perform this operation.Enter a commit message and try again.“
需要你写一下你确认提交的信息,就是你这次提交上去修改了什么功能,简单描述一下
- PostgreSQL auto_explain
The auto_explain module provides a means for logging execution plans of slow statements automaticall ...