PHP多例模式介绍
学习java就知道设计模式中有多例模式:
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。
大家都知道PHP单例模式,却很少说PHP多例模式,下面是在wikipedia上看到的PHP多例模式的例子:
<?php
abstract class Multiton {
private static $instances = array();
public static function getInstance() {
$key = get_called_class() . serialize(func_get_args());
if (!isset(self::$instances[$key])) {
$rc = new ReflectionClass(get_called_class());
self::$instances[$key] = $rc->newInstanceArgs(func_get_args());
}
return self::$instances[$key];
}
}
class Hello extends Multiton {
public function __construct($string = 'World') {
echo "Hello $string\n";
}
}
class GoodBye extends Multiton {
public function __construct($string = 'my', $string2 = 'darling') {
echo "Goodbye $string $string2\n";
}
}
$a = Hello::getInstance('World');
$b = Hello::getInstance('bob');
// $a !== $b
$c = Hello::getInstance('World');
// $a === $c
$d = GoodBye::getInstance();
$e = GoodBye::getInstance();
// $d === $e
$f = GoodBye::getInstance('your');
// $d !== $f
?>
可以看到PHP多例模式需要getInstance()传递关键值,对于给定的关键值,PHP多例模式只会存在唯一的对象实例,PHP多例模式节省内存,确保同一个对象的多个实例不发生冲突。
相关推荐
-
php设计模式之单例、多例设计模式的应用分析
单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量.如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化. 基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量.但有时并不推荐使用Singleton,因为它生成了一个全局状态且 该单一根对象没有封装任何系统功能.多数情况下,会使单元测试和调试变得困难.读者根据情况自行决定.代码示例: 复制代码 代码如下: <?phpclass Singl
-
php单例模式实现(对象只被创建一次)
单例类至少拥有以下三种公共元素: 必须拥有一个构造函数,并且必须被标记为private. 拥有一个保存类的实例的静态成员变量. 拥有一个访问这个实例的公共的静态方法 具体使用方面,我在下面php实例中注释的很清楚: 复制代码 代码如下: <?php /** * by www.phpddt.com */ class Mysql{ //该属性用来保存实例 private static $conn; //构造函数为private,防止创建对象 private function
-
php 设计模式之 单例模式
小船类boat.php 复制代码 代码如下: <?php class boat { private static $instance=null; private $skipper; private $personNum=0; private $passengers=array(); private function __construct() { } public static function getInstance(){ if (self::$instance==null){ self::$
-
基于php设计模式中单例模式的应用分析
单例模式:简单的说,一个对象只负责一个特定的任务. 单例类: 1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化 2.拥有一个保存类的实例静态成员变量 3.拥有一个访问这个实例的公共的静态方法.[常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到此类是否已经被实例化] 注:需要创建__clone()方法防治对象被复制作用: 1.php的应用主要用于数据库,所以一个应用中会存在大量的数据库操作
-
php设计模式 Singleton(单例模式)
复制代码 代码如下: <?php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function getInstance() { if(is_null(self::$_instance)) { self::$_instance = new Singl
-
PHP最常用的2种设计模式工厂模式和单例模式介绍
1.工厂模式 主要作用是降低耦合度. 复制代码 代码如下: abstract class Operation{ abstract public function getValue($num1,$num2); public function getAttr(){ return 1; } } class Add extends Operation{ public function getValue($num1, $num2){ return $num1+$num2; } } class Sub ex
-
鸡肋的PHP单例模式应用详解
单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 复制代码 代码如下: <?php /* 单例模式举例,其要点如下: * * 1. $_instance 必须声明为静态的私有变量 * 2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义 * 3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用 * 4. ::操作符只能访问静态变量或静态函数 * 5
-
PHP多例模式介绍
学习java就知道设计模式中有多例模式: 1.多例类可以有多个实例2.多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例. 大家都知道PHP单例模式,却很少说PHP多例模式,下面是在wikipedia上看到的PHP多例模式的例子: 复制代码 代码如下: <?php abstract class Multiton { private static $instances = array(); public static function getInstance() { $
-
对命令行模式与python交互模式介绍
命令行模式与python交互模式 1.在命令行模式下,可以执行 python 进入 Python 交互式环境,也可以执 行 python hello.py 运行一个.py 文件. 2.在 Python 交互式环境下,只能输入 Python 代码并立刻执行. 3.Python 交互式环境会把每一行 Python 代码的结果自动打印出来,但是,直接运行 Python 代码却不会. 例: 在 Python 交互式环境下,输入: >>> 100 + 200 + 300 600 直接可以看到结果
-
javascript创建对象的几种模式介绍
在js中有几种模式可以创建对象,通过对象操作所包含的属性与方法. 一般来说,构造函数名称的第一个字母为大写字母,非构造函数名称的第一个字母为小写字母,当然,构造函数与一般函数唯一的区别只是调用的方式不同而已,所以任何函数只要通过new来调用,那它就可以作为构造函数,若不通过new来调用,则与一般函数一样. 谈谈我对这几种模式的理解: 工厂模式:创建一个一般函数,在函数里创建一个Object对象,为这个对象增添属性与方法,同时赋予其值,最后返回对象.无法识别对象类型. 构造函数模式:创建构造函数,
-
C#学习笔记整理-迭代器模式介绍
什么是迭代器模式? 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 何时使用迭代器模式? 当需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,需要考虑使用迭代器模式. 迭代器模式的组成 Iterator:迭代器抽象类,用于定义得到开始对象,对到下一个对象,判断是否到结尾,当前对象等抽象方法,统一接口. ConcreteAggregate:保存聚合对象. ConcreteIterator:继承于Iterator,实现具体如何对聚
-
Java单例模式和多例模式实例分析
本文实例讲述了Java单例模式和多例模式.分享给大家供大家参考,具体如下: 一 单例模式 1 代码 class Boss { private static Boss instance;// 静态成员变量,用来保存唯一创建的对象实例 private Boss () { // 利用私有化构造方法,阻止外部创建对象 } public static Boss findBoss() //检查并确保只有一个实例 { if (instance == null) { System.out.println("当前
-
8086汇编开发环境搭建和Debug模式介绍(图文详解)
1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,
-
踩坑:pytorch中eval模式下结果远差于train模式介绍
首先,eval模式和train模式得到不同的结果是正常的.我的模型中,eval模式和train模式不同之处在于Batch Normalization和Dropout.Dropout比较简单,在train时会丢弃一部分连接,在eval时则不会.Batch Normalization,在train时不仅使用了当前batch的均值和方差,也使用了历史batch统计上的均值和方差,并做一个加权平均(momentum参数).在test时,由于此时batchsize不一定一致,因此不再使用当前batch的均
-
详谈ThreadLocal-单例模式下高并发线程安全
目录 ThreadLocal-单例模式下高并发线程安全 为了解决线程安全的问题,我们有3个思路: 多线程中的ThreadLocal 1.ThreadLocal概述 2. ThreadLocal简单实用 3.ThreadLocal的内部原理 3.1 get方法 3.2 set方法 3.3 remove方法 3.4 initialValue方法 4. 总结 5. ThreadLocalMap引发的内存泄漏 ThreadLocal-单例模式下高并发线程安全 在多例的情况下,每个对象在堆中声明内存空间,
-
C语言设计模式之命令模式介绍
目录 介绍: 传统方式: 命令模式: 总结 介绍: 命令模式是一种行为模式,它可以使代码解耦,便于维护: 假设我们现在要设计一个命令解析的模块: 传统方式: void func1(void) { printf("func1\r\n"); } void func2(void) { printf("func2\r\n"); } void func3(void) { printf("func3\r\n"); } void prase_cmd(cha
-
Spring bean配置单例或多例模式方式
目录 Spring bean配置单例或多例模式 单例 多例 Spring scope配置单例.多例模式 1.scope属性介绍 2.scope配置 3.单例模式底层实现模拟 Spring bean配置单例或多例模式 单例 spring bean 默认是单例默认,在对应.xml文件中的配置是: <bean id="user" class="..." scope="singleton"/> singleton就是配置这个bean是否是单例
随机推荐
- SqlServer使用公用表表达式(CTE)实现无限级树形构建
- DB2专家王云谈商业智能BI
- js改变css样式的三种方法推荐
- 个人简历词汇
- Java实现图片上传到服务器并把上传的图片读取出来
- Python实例分享:快速查找出被挂马的文件
- jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
- javascript 字符串连接的性能问题(多浏览器)
- 浅析is_writable的php实现
- ASP中应用事务处理技巧
- JavaScript使表单中的内容显示在屏幕上的方法
- 简单谈谈MySQL5.7 JSON格式检索
- 电饭锅 蛋糕制作图文教程
- JS简单实现多级Select联动菜单效果代码
- 详解Android全局异常的捕获处理
- 在eigrp做不等值路由的负载均衡
- Node之简单的前后端交互(实例讲解)
- Django Docker容器化部署之Django-Docker本地部署
- Ubuntu Server下无线网卡的配置详解
- python3实现字符串的全排列的方法(无重复字符)