php与设计模式-原型模式

AI开发助手介绍 AI开发助手介绍随着NLP方向发展越来越成熟,AI写代码领域出现了几个非常好的模型,今天笔者给大家推荐几个AI Coding 助手AI Coding助手是以IDEA插件或vim插件形式提供服务,在编辑器中写代码时,可以实时预测下一行要输入的代码,提升开发效率。Github Copilot首先要介绍的是Github Copilot,Copilot是个AI Coding助手,它从注释和代码中提取上下文,给出单行和整个函数的代码建议,Copilot由Open AI 的CodeX模型提供支持,它是一个由OpenAI 阅读详情

原型模式

通过复制已经存在的对象来创建新对象
有的时候创建一个对象有很多步骤才算是完成一个完整的创建过程,我要再创建一个的话,还得从头开始,不如复制,使用原型模式实现

Demo:

interface Potrotype{
   public function copy();
}

//通过在原型类中加一个copy方法,使得这个原型类的实例可以被复制
class Demo implements Potrotype{
   private $state;

   public function setState($state){
       $this->state = $state;
   }

   public function getState(){
       return $this->state;
   }

public function copy(){
   //浅拷贝   指针拷贝是浅拷贝
       return clone $this;

/ *
* 深拷贝   值拷贝是深拷贝
*/
//      $tmp = serialize($this);
//      $tmp = unserialize($tmp);
//      return $tmp;
   }
}

class Client{
   public static function main(){
       $obj1 = new Demo();
       $obj1->setState(23);
       $obj2 = $obj1->copy();
       $res = $obj2->getState();
       echo $res;
   }
}
Client::main();

php clone 方法是浅拷贝(针对被拷贝对象内的属性成员是引用类型的,则拷贝后对象的该属性仍是引用类型,没有复制出一份新的)

浅拷贝
class myClass{
   public $data;
}
$sss ="aaa";
$obj1 = new myClass();
$obj1->data =&$sss;   //注意,这里是个引用!
$obj2 = clone $obj1;
$obj2->data="bbb";  //这时,$obj1->data的值变成了"bbb" 而不是"aaa"!
var_dump($obj1);//bbb
var_dump($obj2);//bbb

深拷贝
class myClass{
   public $data;
   function copy(){
       $tmp = serialize($this);
       $tmp = unserialize($tmp);
       return $tmp;
   }
}
$sss ="aaa";
$obj1 = new myClass();
$obj1->data =&$sss;   //注意,这里是个引用!
$obj2 = $obj1->copy();
$obj2->data="bbb";  //这时,$obj1->data的值变成了"bbb" 而不是"aaa"!
var_dump($obj1);//aaa
var_dump($obj2);//bbb

大学学习c语言时,提到过这两个的区别。我依稀记得是 值拷贝是深拷贝,而指针拷贝是浅拷贝。
浅复制呢又称为浅拷贝,深复制又称为深拷贝。
浅复制的话,就是通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),
而这个新对象中所有的值类型变量都含有与老对象相同的值,
但是,新对象所有的对其他对象的引用却是和老对象指向同一个地方,
即对引用类型来说,老对象和新对象指向同一个引用对象。
深复制呢,和浅复制就一点不同,那就是,
新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象。

请关注我的订阅号

订阅号.png

在线考试题库抓取:Python 爬虫抓取各类在线考试平台题库和试题 通过这些技术,您可以抓取各类在线考试平台上的题库数据,进行数据分析、生成练习题集,甚至用于考试准备。为了演示抓取过程,本篇博客选择了两个常见的在线考试平台进行数据抓取:一个是教育考试平台(如“中小学题库”),另一个是职业考试平台(如“华图教育”)。对于这些网站,我们需要找到包含题库信息的页面,并分析每一页的 HTML 结构,从而定位到题目、选项、答案等数据。大多数在线考试平台的题库是分页显示的,因此我们需要遍历多个页面,抓取所有的题库数据。因此,我们需要设置合适的请求头来模拟真实的浏览器请求。 阅读详情

相关推荐

基于STM32与OV7670的嵌入式视频监控系统设计与实现

本文详细介绍了基于STM32单片机与OV7670摄像头的嵌入式视频监控系统设计与实现。从硬件选型、电路设计到软件开发,涵盖了摄像头驱动、TFT显示优化及图像处理等关键技术,提供了实用的调试技巧和性能优化方案,为低成本、高效率的视频监控系统开发提供完整解决方案。

desk3的博客 801

php原型模式,php设计模式 prototype (原型模式)

php有23种设计模式,你全都知道吗?下面用代码介绍原型模式(prototype模式)

weixin_36484898的博客 172

STM32玩转C++:从Arduino库到HAL库的封装思路(Clion环境配置指南)

本文介绍了如何在STM32开发中使用C++封装HAL库,从Arduino风格过渡到更高效的开发方式。通过Clion环境配置指南和详细的代码示例,展示了如何利用C++的面向对象特性简化GPIO、UART等外设操作,提升代码可读性和开发效率。特别适合嵌入式开发者和从Arduino转向STM32的开发者。

weixin_33737134的博客 335

PHP设计模式—原型模式

定义: 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过 clone 这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。目的是使用 clone 对象来减少 new 对象的开销。 原型 clone 有浅复制和深复制: 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。 深...

幽篁晓筑的博客 258

【Cadence】Virtuoso@LayoutXL 差分电路版图镜像同步技巧详解

本文详细介绍了在Cadence Virtuoso LayoutXL中实现差分电路版图镜像同步的技巧,包括核心需求、环境配置、分步操作指南及高级技巧。通过使用LayoutXL的Group功能,工程师可以高效保持差分电路的对称性,提升版图迭代效率,确保高速信号处理的稳定性。特别适用于深亚微米工艺下的差分放大器设计。

weixin_29215391的博客 323

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

PHP讲解设计模式:原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而无需重新初始化对象。这种方式可以提高性能,特别是在创建复杂对象时,因为不需要每次都执行构造函数中的初始化逻辑。

软件架构师笔记 2032

Ubuntu 24.04 部署 EMQX 5.8 开源版MQTT服务器:从零搭建到实战应用

本文详细指导如何在Ubuntu 24.04系统上部署EMQX 5.8开源版MQTT服务器。内容涵盖从环境准备、安装Erlang、下载安装包到启动服务的完整步骤,并提供了验证服务、配置网络防火墙以及通过WebSocket工具进行基础消息收发的实战方法,帮助用户快速搭建稳定、免费的物联网消息中间件。

weixin_29209825的博客 293

PHP设计模式——原型模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。        用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化

姜海强 4329

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

【Bug已解决】codex: tool call timeout / Function execution exceeds limit — CodeX CLI 工具调用超时解决方案

CodeX CLI 工具调用超时(Bash/文件/MCP)的解决方案,含增加超时、拆分命令、后台运行、避免交互卡住与限制读取。

博客 4204

PHP设计模式-原型模式

PHP设计模式—原型模式 原型模式:通过clone创建一个新的对象 (一)为什么使用原型模式: 初始化新的大对象时的很耗开销;原型模式可以直接clone对象从而创建一个新对象,免去初始化时的开销 (二)原型模式的UML图: (三)原型模式的简单实例: 1.代码: /** * 原型类 */ abstract class Prototype { protected $...

挣扎中的码农 314

MIKE21 MIKE软件 教程 0.1 软件介绍与教学目录

MIKE 21是一个专业的工程软件包,用于模拟河流、湖泊、河口、海湾、海岸及海洋的水流、波浪、泥沙及环境问题。在MIKE Zero集成平台中,主要有MIKE11,MIKE21,MIKE3三类软件,分别对应一维,二维,三维的水动力模型模拟。同时还包括MIKE HYDRO,MIKE FLOOD等其他功能,各软件的具体介绍请参考DHI公司的官方文档,在此不作赘述。学习过程中,对于任何操作界面的疑问,建议大家仔细阅读帮助文档(在有疑问的界面按F1调出),同时官方也提供了对应的线上和线下教学服务(免费+收费)。

Hello Word 2万+

php原型模式,php设计模式-原型模式

原型模式概念用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。使用场景它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。原型模式适用于大型对象的创建,创建一个大型对象需要很大的开销,如果每次new就会消耗很大,原型模式只需内存拷贝即可主要角色抽象原型(Prototype)角色:声明一个克隆自身的接口具...

weixin_35750483的博客 160

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PHP 之设计模式学习笔记 - 原型模式

PHP 之设计模式学习笔记(自用) - 原型模式 原型模式是先创建好一个原型对象,然后通过clone原型对象来创建新的对象。适用于大对象的创建,因为创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可。 使用场景: 大数据量(例如:通过ORM 模型一次性往数据库中插入1,000,000条数据) 实例: 抽象原型角色:声明一个克隆自身的抽象类 <?php namespace App\Service\DesignPattern\Prototype; use App\M

WalkerDistance的博客 182

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

2018-3-8-PHP设计模式【原型模式】

layout title date author desc in_head post PHP设计模式之原型模式 2018-03-08 10:00:02 +0800 南丞 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容...

PFinal社区 99

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PHP设计模式:创建型之原型模式(Prototype)

原型模式(Prototype) 意图:   【GoF】用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 动机:   虽然抽象工厂把创建者与产品实现分离,但是也造成了每次添加产品家族时,都要创建一个相关的具体创建者,在一个快速增长的系统中,随着包含的产品越来越多,维护这种关系将会变得越来越复杂。为了避免这种情况,我们可以利用PHP中的clone关键字,生成产品对象自身的克隆...

weixin_30929195的博客 117

PHP设计模式 原型模式(Prototype)

定义 和工厂模式类似,用来创建对象。但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建。 场景 大对象的创建。 优点 1、可以在运行时刻增加和删除产品 2、可以改变值或结构以指定新对象 3、减少子类的构造 4、用类动态配置应用 缺点 Prototype是的最主要的缺点就是每一个类必须包含一个克隆方法; 而且这个克隆方法需要对类的功能进行检测,这对于全新的类来说...

weixin_30386713的博客 87

php设计模式之原型模式详解

原型模式 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。 原型模式提供了一种复制已有对象的简便方式, 可代替直接复制对象的所有成员变量来对对象进行重构的方法 原型模式让你能够在被克隆类的内部进行克隆工作, 因此可以不受限制地访问类的私有成员变量。 创建原型接口, 并在其中声明 克隆方法。

LiYi 468

PHP 设计模式系列之原型模式(Prototype)

通过创建原型使用克隆方法实现对象创建而不是使用标准的 new 方式 BarBookPrototype.php FooBookPrototype.php 4、测试代码 Tests/PrototypeTest.php 5、总结 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是用对象内部提供的克隆方法,通过该方法返回一个对象的副本,这种创建对象的方式,相比我们之前说的几类创建型模式还是有区别的,之前的讲述的工厂方法模式与抽象工厂都是通过工厂封...

vd15528175269的博客 309

[PHP设计模式]六、原型模式

原型模式 与工厂模式作用类似,都是用来创建对象 与工厂模式的实现不同,原型模式是先创建一个原型对象,然后通过clone原型对象来创建新的对象,这样就免去了类创建时重复的初始化操作 原型模式适用于大对象的创建。创建一个大对象需要很大的开销,如果每次new就会消耗很大,原型模式仅需内存拷贝即可 示例代码: $prototype = new TT\Canvas(); $prototype->init(); $canvas1 = clone $prototype; $canvas1->rect(3

qq_39545346的博客 141

PHP设计模式(五): 原型模式

???? 原型模式 现实生活示例 还记得多莉吗?那只克隆羊。这里不深入细节,关键点在于克隆。 概述 基于现有对象通过克隆创建对象。 维基百科 在软件开发过程中,原型模式是一种创建型设计模式。当要创建的对象类型由原型实例确定时,将通过克隆原型实例生成新对象。 简言之,原型模式允许你创建现有对象...

a23453565466的博客 126

PHP设计模式(六)-原型模式

layout: post title: "PHP设计模式(六)-原型模式" date: 2016-06-07 10:22:51 +0800 comments: true categories: [php] 1、模式定义 通过创建原型使用克隆方法实现对象创建而不是使用标准的new 方式。 2、UML类图 image 3、示例代码 &lt;?php namespace De...

EwanRenton 321

PHP设计模式之原型模式

原型模式其实更形象的来说应该叫克隆模式。它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是,这个模式就这样被命名了。说真的,从使用方式来看真的感觉叫克隆模式更贴切一些。 Gof类图及解释 GoF定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 GoF类图 代码实现 abstract class Prototype { public ...

bujidexinq的专栏 315

php原型模式,PHP设计模式之 原型模式

这篇文章介绍的内容是关于PHP设计模式之 原型模式,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下原型模式(Prototype) 理解起来也不算很难。总结起来就是通过一种克隆的方式去创建对象,节省创建对象的复杂度。主要可以用来防止重复创建对象带来的大量代码冗余。记录代码如下:...

weixin_32653933的博客 107

PHP-设计模式详解(原型模式)

原型模式(Prototype) 介绍 创建型模式,原型模式有人形象的称其为克隆模式,通过拷贝已存在的对象来创建新的对象。 何时使用:当new的对象很大,每次new耗费资源颇多的时候,可以采用原型模式进行创建。 优点: A、提高性能; B、逃避构造函数的约束; 缺点: 对于已有的类进行克隆,需要考虑的 代码实现: <?php class ChinaMobile{ public $system; } class Phone{ public $service_sy

firesea的专栏 157
上一篇: php与设计模式-建造者模式
下一篇: php与设计模式-适配器模式
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值