<?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. Microsoft visual studio 2015已停止工作最全解决办法

    1.重装系统,不到万不得已不要选择...麻烦. 2.使用管理员权限运行VS,部分可能有效. 3.卸载重新安装vs,如果是一些配置问题或许能解决,还有要是卸载的干净可能有效. 4.据说可能是插件有问题造 ...

  2. css使用padding-bottom百分比进行提前占位,防止抖动

    页面加载抖动问题 在web开发中,经常会遇到这样一个问题,比如一个宽度百分百,高度自适应的图片,在网速慢的情况下加载过程中会出现抖动的问题(未加载图片前容器的高度为0,图片加载完成后下面的内容会被挤下 ...

  3. docker下载镜像太慢的解决方案

    参考链接:https://blog.csdn.net/weixin_43569697/article/details/89279225 docker下载镜像卡死或太慢找了网上很多方法,使用镜像中国也是 ...

  4. linux100讲——80 系统函数库介绍

    1.系统自建了函数库,可以在脚本中引用 /etc/init.d/functions 2.自建函数库 使用 source 函数脚本文件 “导入”函数 3. vim /etc/init.d/functio ...

  5. Selenium3+python自动化014-自动化测试框架的作用

    1.能够有效组织和管理测试脚本 2.进行数据驱动或者关键字驱动的测试 3.将基础的测试代码进行封装,降低测试脚本编写的复杂性和重复性 4.提高测试脚本维护和修改的效率 5.自动执行测试脚本,并自动发布 ...

  6. 记一个js toUpperCase函数 大小写特性

    toUpperCase()是javascript中小写变大写的函数 "ı".toUpperCase() == 'I',"ſ".toUpperCase() == ...

  7. 关于整合ssh中的细节03

    关于spring中提供的一些工具类和监听介绍 一.spring提供了一个HibernateTemplate类 ①HibernateTemplate类: 用于操作PO对象,类似Hibernate Ses ...

  8. 51Nod 1449 砝码称重 (二进制思想)

    现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组 ...

  9. How to do high impact research + 实事求是

    1. develop a strong publications record early, so do what you can to make that happen. 2. 粗读:abstrac ...

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

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