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的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...
随机推荐
- oracle卸载步骤
一.删除产品 1. 停服务,进入下图,一个个删除Oracle产品,再执行卸载 二.清注册表,开始-搜索- 输入regedit,进入注册表 1.选择HKEY_LOCAL_MACHINE\SOFTWARE ...
- ROS开发--在订阅话题的回调函数中发布话题
处理激光数据时,需要将处理后的激光数据再发布,需要保持一致的频率,所以必须在回调函数中发布激光数据信息. 代码参考:https://blog.csdn.net/heyijia0327/article/ ...
- 设置 myeclipse 编码格式
参考网址:https://jingyan.baidu.com/article/77b8dc7fc6e1626174eab6bb.html
- DirectX11--HLSL语法入门
前言 编写本内容仅仅是为了完善当前的教程体系,入门级别的内容其实基本上都是千篇一律,仅有一些必要细节上的扩充.要入门HLSL,只是掌握入门语法,即便把HLSL的全部语法也吃透了也并不代表你就能着色器代 ...
- 第四十九篇 入门机器学习——数据归一化(Feature Scaling)
No.1. 数据归一化的目的 数据归一化的目的,就是将数据的所有特征都映射到同一尺度上,这样可以避免由于量纲的不同使数据的某些特征形成主导作用. No.2. 数据归一化的方法 数据归一化的方法主要 ...
- Tram POJ - 1847 spfa
#include<iostream> #include<algorithm> #include<queue> #include<cstdio> #inc ...
- AcWing 10. 有依赖的背包问题
#include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...
- CodeForces - 651C Watchmen (去重)
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...
- C#之Quartz任务调度的使用(2.2.3.400)
这里使用的Quartz版本号为2.2.3.400,.net 框架为4.0. 目的实现一个小案例,每隔一秒钟打印一条记录.后面会附上源码,以供参考. 建立一个 控制台程序. 代码: class Pro ...
- PP: GRU-ODE-Bayes: Continuous modeling of sporadically-observed time series
From: KU Leuven; ESAT-STADIUS比利时鲁汶大学 ?? How to model real-world multidimensional time series? especi ...