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的引出 单例设计,从名字上首先可以看出单---即只有一个,例---只的是实例化对象:那么单例也就是说一个类,只产生了一个实例化对象.但是我们都知道,一个类要产生实例化对象 ...
随机推荐
- Python循环引用的解决方案
1.延迟导入:即将 from xxx import yyy 放到函数或类的内部,从而使其作用域变成局部的,但是这样可能会对性能有些影响: 2.将 from xxx import yyy 转换成 imp ...
- 选课系统项目_python
一.功能简要 基本实现以下功能,但是有部分地方由于时间关系并未写,而且并未做细微的完善,大致功能完成.角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , pyt ...
- 使用ssh localhost命令,发生异常ssh: connect to host localhost port 22: Connection refused
使用"ssh localhost"命令,失败: 问题分析如下: 出现这个问题是因为Ubuntu默认没有安装openssh-server.检查是否安装了openssh-server, ...
- Java String类型转换成Date日期类型
插入数据库时,存入当前日期,需要格式转换 import java.text.SimpleDateFormat; formatter = new SimpleDateFormat( "yyyy ...
- Python标准库之re模块
re模块用于正则表达式. 正则表达式在线测试:http://c.runoob.com/front-end/854 正则表达式元字符可以参考:https://www.w3cschool.cn/zheng ...
- BurpSuite 汉化版(含注册机)安装教程
1.注册机使用方法 首先需要完成java安装及环境变量配置. 打开burp-loader-keygen.jar(注册机)--点击run--license text (随意写)--然后将生成的lic ...
- A*模板(求K短路)(POJ2449)
A*是bfs的优化,IDA*是dfs的优化 A*算法: 为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中.而A*算法最为核心的部分,就在于它的一个估值函数的设计上: f(n) ...
- 关于eclipse 项目导入不了 maven依赖的解决办法
1.首先确定你的项目是maven 项目 ,如果不是:项目右键Configure -->Convert to maven project. 2.在SVN导出的Maven项目,或以前不是用Maven ...
- 0002 Django工程创建
1 创建一个目录,用于专门存放Django工程的虚拟环境 PyCharm默认虚拟环境在工程内,从而导致打包的时候,会把虚拟环境一起打包. 同时,虚拟环境中的插件较多,一个工程创建了一个虚拟环境,以后, ...
- Java单体应用 - 架构模式 - 02.MVC架构
原文地址:http://www.work100.net/training/monolithic-architecture-mvc.html 更多教程:光束云 - 免费课程 MVC架构 序号 文内章节 ...