php与设计模式-备忘录模式

PHP设计模式之备忘录模式 发起者是需要保存状态的对象,备忘录是用于存储状态的对象,而管理者负责管理备忘录对象。备忘录模式是一种行为型设计模式,它可以在不破坏封装性的前提下,捕获一个对象的内部状态,并将其保存在外部,以便在需要时可以恢复到原先的状态。通过备忘录模式,我们可以实现对象状态的保存和恢复,从而实现撤销操作或者在需要时恢复对象的状态。管理者类(Caretaker)用于管理备忘录对象,它可以添加备忘录对象到一个列表中,并提供获取备忘录对象的方法。备忘录类(Memento)用于存储发起者对象的状态,并提供了获取状态的方法。 阅读详情

备忘录模式

又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

Demo

<?php 
   /**
    * Created by PhpStorm.
    */ 

   //游戏角色 
   class GameRole 
   { 
       #region 游戏角色状态属性(生命力、攻击力、防御力) 
       public $liveLevel; 

       public $attackLevel; 

       public $defenseLevel; 
       #endregion 

       //保存状态 
       public function SaveState() 
       { 
           return (new RoleStateMemento($this->liveLevel,$this->attackLevel,$this->defenseLevel)); 
       } 

       //恢复状态 
       public function RecoveryState(RoleStateMemento $_memento) 
       { 
           $this->liveLevel = $_memento->liveLevel; 
           $this->attackLevel = $_memento->attackLevel; 
           $this->defenseLevel = $_memento->defenseLevel; 
       } 

       //------------其他属性及操作-------------- 
       //获得初始状态 
       public function GetInitState() 
       { 
           $this->defenseLevel = 100; 
           $this->attackLevel = 100; 
           $this->liveLevel = 100; 
       } 

       //状态显示 
       public function StateDisplay() 
       { 
           echo "角色状态:<br/>"; 
           echo "生命力:{$this->liveLevel}<br/>"; 
           echo "攻击力:{$this->attackLevel}<br/>"; 
           echo "防御力:{$this->defenseLevel}<br/>"; 
       } 

       //被攻击 
       public function BeenAttack() 
       { 
           $this->liveLevel -= 9.5; 
           if($this->liveLevel<=0) 
           { 
               $this->liveLevel = 0; 
               echo "呃,该角色阵亡了!<br/>"; 
               echo "Game Over!<br/>"; 
               return; 
           } 

           $this->attackLevel -= 1.1; 
           if($this->attackLevel<=0) 
           { 
               $this->attackLevel = 0; 
           } 

           $this->defenseLevel -= 0.5; 
           if($this->defenseLevel<=0) 
           { 
               $this->defenseLevel = 0; 
           } 
       } 
       } 

   //角色状态存储箱类 
   class RoleStateMemento 
   { 
       public $liveLevel; 
       public $attackLevel; 
       public $defenseLevel; 

       public function RoleStateMemento($_ll,$_al,$_dl) 
       { 
           $this->liveLevel=$_ll; 
           $this->attackLevel=$_al; 
           $this->defenseLevel=$_dl; 
       } 
   } 

   //游戏角色状态管理者类 
   class RoleStateManager 
   { 
       public $memento; 
   } 

//开战前 
$ufo = new GameRole(); 
$ufo->GetInitState(); 
echo "<span style='color:#ff0000'>----------------开战前-----------------</span><br/>"; 
$ufo->StateDisplay(); 

//保存进度 
$roleMan = new RoleStateManager(); 
$roleMan->memento = $ufo->SaveState(); 

echo "<span style='color:#ff0000'>----------------战斗中-----------------</span><br/>"; 
$num=1; 
//大战Boss5个回合 
for ($i = 0; $i <13;$i++ ) 
{ 
   echo "-------------第{$num}回合-------------<br/>"; 
   $ufo->BeenAttack(); 
   $ufo->StateDisplay(); 
   $num++; 
   //角色阵亡 
   if($ufo->liveLevel<=0) 
   { 
       break; 
   } 
} 

echo "<span style='color:#ff0000'>----------------恢复状态-----------------</span><br/>"; 
//恢复之前状态 
$ufo->RecoveryState($roleMan->memento); 
$ufo->StateDisplay(); 

请关注我的订阅号

订阅号.png

icem二维非结构网格划分_ICEM CFD网格装配 正文共:718字7图 预计阅读时间:2分钟1 前言 对于一些大型的复杂的网格划分,可以将整个模型切分成多个子模型(二维几何用线切分,三维模型用面切分),然后对各个模型单独划分网格,最终装配在一起。这和机械设计的零件设计和装配设计有点相似,这个功... 阅读详情

相关推荐

别再到处找模型了!手把手教你用Xinference+Docker部署本地私有大模型(Llama2/Qwen实战)

本文详细介绍了如何使用Xinference和Docker部署本地私有化大模型(如Llama2/Qwen),涵盖硬件配置、模型管理、Docker部署及性能优化等关键步骤。通过实战案例,帮助开发者快速构建企业级AI推理服务,确保数据安全与高效运行。

weixin_28683065的博客 231

初识PHP设计模式--备忘录模式

 备忘录模式(Memento)是行为模式之一。 概念:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 从命名基本上可以了解到这个模式的作用,我们都知道无论是以前的手机还是现在的手机,都会有备忘录这个功能,备忘录的作用是什么呢? 防止人脑记不住的时候,记录到备忘录里面,可以随时拿出来提醒自己,就像是日志文件一样。 例如:作为开发人...

qq_36101162的博客 311

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8267

PHP设计模式——备忘录模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。                 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。              UML类图:                              角色:      

姜海强 2637

从零到一:基于JasperGold的FPV实战入门与避坑指南

本文详细介绍了基于JasperGold的形式化验证(FPV)实战入门指南,涵盖环境搭建、SVA断言编写、TCL脚本调试等关键步骤。通过实际案例解析,帮助IC设计工程师掌握FPV技术,有效验证RTL设计中的复杂逻辑和corner case,提升验证效率与质量。

weixin_30899023的博客 360

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9733

php备忘录模式,PHP设计模式(十八)—备忘录模式(Memento Pattern)

备忘录模式 (Memento Pattern): 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。又叫做快照模式(Snapshot Pattern)或Token模式(一)为什么需要备忘录模式1,有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息...

weixin_42329733的博客 186

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

php备忘录,学习php设计模式 php实现备忘录模式(Memento)

一、意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在以后把该对象的状态恢复到之前保存的状态。二、备忘录模式结构图三、备忘录模式中主要角色1、备忘录(Memento)角色:存储发起人(Originator)对象的内部状态,而发起人根据需要决定备忘录存储发起人的哪些内部状态。备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取。2、发...

weixin_34297395的博客 214

CATIA二次开发一一一装配体与零件之间的坐标转换

输入参数:Product(产品实例对象)、iPointToTransfor(待转换坐标点CATMathPoint)核心逻辑:通过产品对象的绝对位置变换矩阵,计算逆向变换实现坐标系转换。输出参数:Point(转换后的局部坐标点CATMathPoint)

工业软件开发 1129

路径规划 | 详解混合A*算法Hybrid A*(附ROS C++/Python/Matlab仿真)

Hybrid A*算法通过结合连续状态空间搜索、运动约束考虑和轨迹优化等技术,弥补了普通A*算法在高维连续空间和的不足,提高了路径规划的效率和鲁棒性,广泛应用于车规级路径规划。本文详细图解Hybrid A*算法的原理——启发式、维诺耗散项、节点扩展法则等,并给出ROS C++、python、matlab三种语言的仿真实现加深理解

FRIGIDWINTER的博客 1万+

2018-1-26-PHP设计模式【备忘录模式】

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

PFinal社区 139

第三节:Vben Admin登录对接后端login接口

上一节,我们梳理的Vben Admin登录功能接口的逻辑,本节开始正式开启后端的开发后端我们采用Python的Flask项目,Flask-SQLAlchemy管理数据库模型,Flask-Migrate进行模型迁移。参考版本如下:Flask3.0.23.1.1本节,我们已经开启的后端的开发,因为是主要介绍Vben Admin的登录逻辑,所以Flask开发这里只截取了部分主要代码。

cuiwin的专栏 4188

浅谈PHP设计模式的备忘录模式

浅谈PHP设计模式的备忘录模式

weixin_42100387的博客 227

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PHP 设计模式-备忘录模式小结

定义: 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 UML类图: 角色: 1.发起人(GameRole):负责创建一个备忘录,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。发起人可以根据需要决定备忘录存储自己的哪些内部状态。 ...

qq_22384829的博客 232

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

php在线备忘录,php设计模式 Memento (备忘录模式)

25种php设计模式,你全都知道吗?下面用代码介绍备忘录模式(Memento模式)

weixin_39975868的博客 124

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PHP设计模式--备忘录模式

 备忘录模式(Memento)是行为模式之一。 概念:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 从命名基本上可以了解到这个模式的作用,我们都知道无论是以前的手机还是现在的手机,都会有备忘录这个功能,备忘录的作用是什么呢? 防止人脑记不住的时候,记录到备忘录里面,可以随时拿出来提醒自己,就像是日志文件一样。 例如:作为开发人...

战国墨竹的博客 151

PHP设计模式—备忘录模式

定义: 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 结构: Originator:发起人,负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。发起人可根据需要决定备忘录存储发起人的哪些内部状态。 Memento:备忘录,负责存储发起人对象的内部状态,并可防止发起人以外的其他对象访问备忘录。备忘录有两个接口,管理者只能看到备忘录的窄接口,它只能将备忘录传递给其他

幽篁晓筑的博客 304

php设计模式之备忘录模式

<?php /** * 备忘录模式 * * 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到保存的状态 */ class Memento { private $_state = null; public function __construct($state) { $this->_state = $state; }

盗墓笔记 304

php实现设计模式之 备忘录模式

<?php /*备忘录模式:在不破坏封装的前提下,获取对象的内部状态,并且在对象外保存该状态。这样就可以将该对象恢复到保存之前的状态(行为模式) * * 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 * 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。 * 管理角色:对备忘录进行管理,...

weixin_30298497的博客 126

[php]php设计模式 Memento (备忘录模式)

1 &lt;?php 2 /** 3 * 备忘录模式 4 * 5 * 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到保存的状态 6 */ 7 class Memento 8 { 9 private$_state=null;10 11 publicfunction __construct($state)12 {13 $th...

weixin_33898876的博客 80
上一篇: php优化36计
下一篇: 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、付费专栏及课程。

余额充值