【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)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...
随机推荐
- Android适配(屏幕适配、国际化适配)-转
首先来说一下Android的屏幕适配: 关于Android屏幕的一些基本概念知识,自行充电..在此只介绍实际开发过程中的使用 1.说到Android的屏幕适配,首当其冲的就是图片的适配 图片适配遵循两 ...
- Java 继承 执行顺序
代码: package com.company; public class Main { public static void main(String[] args) { new MyClass(); ...
- iOS 瀑布流的基本原理
/** * 源代码链接 * 链接: https://pan.baidu.com/s/1nvLamEX 密码: kya5 */ #import <UIKit/UIKit.h> @interf ...
- nexenta systemcallerror
最近在试nexenta做iscsi,设置ip出现上面的错误 解决办法,先讲mtu设置为不周与原来的值,比如原来为1500,先设置成1501,就可以了,然后可以再改回来,也是没有问题的!
- Moment.js学习(一)源代码
本篇主要是学习Moment.js.类库源代码如下: 2.4版本. //! moment.js //! version : 2.4.0 //! authors : Tim Wood, Iskren Ch ...
- 我写了本破书-swift语言实战晋级
本书是一本介绍Swift实战的实用图书,旨在帮有一定编程基础的童鞋能够快速上手Swift. 本书的结构是先讲解了Swift语言的精要,没有基础的童鞋可以学习,有基础的童鞋可以当做复习. 接着讲解如何用 ...
- Error : L6218E: Undefined symbol downloadAddress (referred from nand.o).
MKD 报错: linking...LCD.axf: Error: L6218E: Undefined symbol EnZK (referred from ht128x64.o).LCD.axf: ...
- 监控linux服务器网卡流量
监控linux服务器网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 前言:众所周知,我们安装zabbix服务器 ...
- 3D照片放大展示窗口
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 一个新人对JavaScript的内容简单介绍
JavaScript 1.基本的数据类型:字符串 小数 整数 时间日期 布尔型等. 2.变量: JS定义变量通通都是用var开头,var里面可以放任何东西(如:小数,整数,字符串,时间日期等等 ...