<?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设计模式之单例实例代码的更多相关文章

  1. 设计模式——懒汉式单例类PK饿汉式单例类

    前言 我们都知道生活中好多小软件,有的支持多IP在线,有的仅仅局限于单个IP在线.为什么这样设计,在软件开发阶段就是,有需求就是发展.这就是软件开发的一个设计模式--懒汉式单例类和饿汉式单例类. 内容 ...

  2. 游戏设计模式——C++单例类

    前言: 本文将探讨单例类设计模式,单例类的懒汉模式/饿汉模式,单例类的多线程安全性,最后将利用C++模板减少单例类代码量. 本文假设有一个Manager管理类,并以此为探究单例类的设计模式. 懒汉模式 ...

  3. java软件设计模式只单例设计模式

    概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计 ...

  4. iOS 设计模式之单例

    设计模式:单例 一.  单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并 ...

  5. 详略。。设计模式1——单例。。。。studying

    设计模式1--单例 解决:保证了一个类在内存中仅仅能有一个对象. 怎么做才干保证这个对象是唯一的呢? 思路: 1.假设其它程序可以任意用new创建该类对象,那么就无法控制个数.因此,不让其它程序用ne ...

  6. Java设计模式之单例设计模式 入门实例

    一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...

  7. 设计模式之单例(singleton)设计模式代码详解

    单例有两种:懒汉式和饿汉式 /** * 懒汉式的单例模式 * 这种单例模式如果采用到多线程调用该方法,有可能会产生多个实例,原因是: * 当线程一进入了①处,此时轮到线程二的时间片,线程二也来到①处, ...

  8. 两种设计模式(2)==>>"单例"

    所谓“单例”: 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资 ...

  9. JAVA设计模式:单例设计

    1.单例设计Singleton的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...

随机推荐

  1. IIS7配置asp程序

    Windows 中IIS7.IIS7.5是默认不安装的,所以在安装完Windows Vista/windows 7/windows 2008之后如果需要安装IIS7/iis7.5的话,就要自己动手了. ...

  2. PIE-SDK For C++ Geometry的坐标转换

    1. 基于SpatialReference对象的坐标转换 1.1 示例简介 Geometry类是所有几何形体对象的父类,它是一个抽象类,IGeometry接口定义了所有的几何对象都有的方法和属性. 下 ...

  3. CTS、CLS、CLR

    CTS.CLS和CLR是.NET框架的3个核心部分,下面分别对它们进行介绍. 1)CTS  Common Type System CTS即通用类型系统,它定义了如何在.NET Framework运行库 ...

  4. Golang 简单的读负责均衡

    read-loadbalance master-slave(n) 读库集群负载均衡器(简单轮询)+时间间隔错峰. github 地址:https://github.com/Plen-wang/read ...

  5. Yeoman+Bower+gulp web前端自动化工作流程(初级教程)

    Yeoman包括了三个部分yo(脚手架工具).grunt/gulp(构建工具).bower(包管理器).听说gulp更容易上手,所以我就没用grunt而选的gulp 什么是开发流程? 在我看来一个完整 ...

  6. maven配置文件pom.xml小记

    1.pom.xml主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素 2.基础设置: <modelV ...

  7. vue.js 的cdn 链接的引用地址

    引用地址有两种一种完整版,一种压缩版效果是一样的 https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js https://cdn.bootcss.com ...

  8. [HNOI2004] L语言 - AC自动机,dp

    给定字典和没有标点的文章,求能够被识别的最长前缀. 显然不能贪心,设\(f[i]\)表示前\(i\)个字符构成的前缀能否被识别,然后在AC自动机上暴力转移即可. 具体来说,每走到一个新位置,就沿着fa ...

  9. springBoot 发送邮件图片不显示

    解决方案 MimeMessageHelper 的执行顺序错了,先执行 setText() 然后执行 addInline() 添加图片 <img src="cid:p03"/& ...

  10. PHP函数对比 array_merge()与加号合并数组的区别

    首先准备两个数组,从数组索引类型分别讨论. 数组索引为字符串索引时: $a = array('a' => 1, 'b' => 2, 'c' => 3); $b = array('b' ...