php设计模式之单例实例代码
<?php
header("Content-type:text/html;charset=utf-8"); /**
* 第一步,分别实例化
*/
/*class Single
{
function __construct()
{
# code...
}
} $s1 = new Single();
$s2 = new Single();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}
// 不是同一个对象
*/ /**
* 第二步,封闭new实例化
*/
/*class Single
{
protected function __construct()
{
# code...
}
} $s1 = new Single();
$s2 = new Single();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}
*/ /**
* 第三步,留个接口new实例化
*/
/*class Single
{
public function getInc(){
return new self();
} protected function __construct()
{
# code...
}
} $s1 = Single::getInc();
$s2 = Single::getInc();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}
*/ /**
* 第四步,先判断是否实例化,再决定是否需要new实例化
*/
/*class Single
{
static $inc = null;
public function getInc(){
if (self::$inc === null) {
self::$inc = new self();
}
return self::$inc;
} protected function __construct()
{
# code...
}
} $s1 = Single::getInc();
$s2 = Single::getInc();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}*/ /**
* Multi
*/
/*class Multi extends Single
{ function __construct()
{
# code...
}
}
echo "<br>";
$s1 = new Multi();
$s2 = new Multi();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}*/ /**
* 第五步,封闭构造函数,不让继承到,使用final关键字
*/
/*class Single
{
static $inc = null;
public function getInc(){
if (self::$inc === null) {
self::$inc = new self();
}
return self::$inc;
} final protected function __construct()
{
# code...
}
} $s1 = Single::getInc();
$s2 = Single::getInc();
if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}*/ /**
* Multi
*/
/*class Multi extends Single
{ function __construct()
{
# code...
}
}*/
echo "<br>"; // $s1 = new Multi();
// $s2 = new Multi(); /*
$s1 = Single::getInc();
$s2 = clone $s1; if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}
echo "<br>";
echo "<br>";*/ /**
* 第六步,禁止clone
*
**/
class Single
{
static $inc = null;
public function getInc(){
if (self::$inc === null) {
self::$inc = new self();
}
return self::$inc;
} final protected function __construct()
{
# code...
}
final protected function __clone(){ }
} echo "<br>"; $s1 = Single::getInc();
$s2 = clone $s1; if ($s1 === $s2) {
echo "是同一个对象";
}else{
echo "不是同一个对象";
}
echo "<br>";
echo "<br>";
php设计模式之单例实例代码的更多相关文章
- 设计模式——懒汉式单例类PK饿汉式单例类
前言 我们都知道生活中好多小软件,有的支持多IP在线,有的仅仅局限于单个IP在线.为什么这样设计,在软件开发阶段就是,有需求就是发展.这就是软件开发的一个设计模式--懒汉式单例类和饿汉式单例类. 内容 ...
- 游戏设计模式——C++单例类
前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...
- java软件设计模式只单例设计模式
概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计 ...
- iOS 设计模式之单例
设计模式:单例 一. 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并 ...
- 详略。。设计模式1——单例。。。。studying
设计模式1--单例 解决:保证了一个类在内存中仅仅能有一个对象. 怎么做才干保证这个对象是唯一的呢? 思路: 1.假设其它程序可以任意用new创建该类对象,那么就无法控制个数.因此,不让其它程序用ne ...
- Java设计模式之单例设计模式 入门实例
一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...
- 设计模式之单例(singleton)设计模式代码详解
单例有两种:懒汉式和饿汉式 /** * 懒汉式的单例模式 * 这种单例模式如果采用到多线程调用该方法,有可能会产生多个实例,原因是: * 当线程一进入了①处,此时轮到线程二的时间片,线程二也来到①处, ...
- 两种设计模式(2)==>>"单例"
所谓“单例”: 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资 ...
- JAVA设计模式:单例设计
1.单例设计Singleton的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...
随机推荐
- Git的精简用法
作为一名开发人员,提交代码那是家常便饭,那如何有效地利用Git进行提交代码呢?在这里介绍一些常用.必要的命令,几乎够工作中使用了. (1)git pull 命令:拉取代码,这条命令没啥说的了,在提交代 ...
- gulp常用插件之gulp-rev-format使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev-format这是一款提供静态资产的哈希格式选项(前缀,后缀,最后扩展名). 更多使用文档请点击访问gulp-rev-format ...
- bugku-求getshell(文件上传)
这道题最主要是考的Content-type参数绕过WAF,然后利用绕过黑名单上传php进行解析. 先上传一个phpinfo()的php文件试试,burp抓包 正常操作,先将下面文件的类型改为:imag ...
- ansible-yaml语法
1. 基础语法 - yaml结果通过空格来展示 - 数组使用"- "来表示 //注意:-后边要有一个空格 - 键值对使用": "来表示 //注意::后边要有一个 ...
- cartographer保存地图
手持激光,并用cartographer建图,保存的地图是.pbstream格式 ht@ht:~$ rosservice call /write_state /home/ht/Desktop/carto ...
- ASP.NET MVC中ActionResult的不同返回方式
1.返回视图 return View();//返回方法名对应的视图 return View("aaa");//返回名称为aaa的视图 2.返回文本内容 return Content ...
- Spring里面AOP的和IOC的理解
1.Spring里面AOP的理解:https://www.cnblogs.com/hongwz/p/5764917.html例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心 ...
- 2级搭建类204-Oracle 12cR2 SI ASM 图形化搭建(RHEL7.6)
红帽RHEL 7.6上搭建Oracle 12cR2 ASM单实例 我给你们说,不是自家的产品,那贼麻烦,你是不是觉得在 红帽 7.6 上搞 12c ASM 觉得应该/好像/可能/或许/貌似/大概/也许 ...
- APP和web设计区别
1.web在给定了核心功能后,还可以往页面再添加小需求如banner.快捷工具条.分页等. APP界面设计时,则偏向精简,尽可能明显的展示核心功能. 2.APP中需要考虑ISO和Andriod两种交互 ...
- UVA - 12333 Revenge of Fibonacci (大数 字典树)
The well-known Fibonacci sequence is defined as following: F(0) = F(1) = 1 F(n) = F(n − 1) + F(n − 2 ...