当前位置: 首页 > news >正文

离石网站建设公司/宁波专业seo外包

离石网站建设公司,宁波专业seo外包,wordpress免费主题,合肥网站制作软件设计模式_24 备忘录模式24 备忘录模式24.1 概念24.2 结构24.3 实现24.3.1 白箱备忘录模式24.3.1.1 UML图24.3.1.2 代码24.3.2 黑箱备忘录模式24.3.2.1 UML图24.3.2.2 代码24.4 优缺点24.4.1 优点24.4.2 缺点24.5 使用场景return 设计模式概述;24 备忘录模式 24.1 概念 存档&a…

设计模式_24 备忘录模式

  • 24 备忘录模式
    • 24.1 概念
    • 24.2 结构
    • 24.3 实现
      • 24.3.1 白箱备忘录模式
        • 24.3.1.1 UML图
        • 24.3.1.2 代码
      • 24.3.2 黑箱备忘录模式
        • 24.3.2.1 UML图
        • 24.3.2.2 代码
    • 24.4 优缺点
      • 24.4.1 优点
      • 24.4.2 缺点
    • 24.5 使用场景
  • return 设计模式概述;

24 备忘录模式

24.1 概念

存档,撤销。
在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时,能将该对象恢复到原先保存的状态。

24.2 结构

发起人角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,可以访问备忘录里的所有信息。
备忘录角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
管理者角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问和修改。

备忘录的两个等效接口:
窄接口:管理者对象(和其他发起人对象之外的任何对象)看到的是备忘录的窄接口,该接口只允许他把备忘录对象传给其他对象。
宽接口:发起人对象可以看到宽接口,该接口允许他读取所有数据,以便根据这些数据恢复这个发起人对象的内部状态

24.3 实现

24.3.1 白箱备忘录模式

备忘录角色对任何对象都提供一个接口,即宽接口,备忘录角色内部存储的状态对所有对象公开。

24.3.1.1 UML图

在这里插入图片描述

24.3.1.2 代码

#include<iostream>
#include<string>
using namespace std;class RoleMemorandum {
private:int level;int time;string package;
public:RoleMemorandum(int level, int time, string package) : level(level), time(time), package(package) {}int getLevel() {return this->level;}int getTime() {return this->time;}string getPackage() {return this->package;}
};class GameRole {
private:int level;int time;string package;
public:void initState() {this->level = 0;this->time = 0;this->package.clear();}void play() {this->level++;this->time++;this->package += "不朽盾 ";}RoleMemorandum* saveState() {RoleMemorandum* roleMemorandum = new RoleMemorandum(this->level, this->time, this->package);return roleMemorandum;}void recoverState(RoleMemorandum* roleMemorandum) {this->level = roleMemorandum->getLevel();this->time = roleMemorandum->getTime();this->package = roleMemorandum->getPackage();}void showState() {cout << "等级:" << this->level << endl;cout << "游戏时长:" << this->time << endl;cout << "背包:" << this->package << endl;cout << endl;}
};class RoleCaretaker {
private:RoleMemorandum* roleMemorandum;
public:RoleMemorandum* getRoleMemorandum() {return this->roleMemorandum;}void setRoleMemorandum(RoleMemorandum* roleMemorandum) {this->roleMemorandum = roleMemorandum;}};int main() {RoleCaretaker* roleCaretaker = new RoleCaretaker();GameRole* role = new GameRole();//初始化role->initState();role->showState();//保存参数roleCaretaker->setRoleMemorandum(role->saveState());//进行游戏role->play();role->showState();//回档role->recoverState(roleCaretaker->getRoleMemorandum());role->showState();return 0;
}

24.3.2 黑箱备忘录模式

备忘录角色对发起人对象提供一个宽接口,而对其他对象提供一个窄接口。
实现方法:将备忘录类设计成发起人类的内部成员类。

24.3.2.1 UML图

在这里插入图片描述

24.3.2.2 代码

#include<iostream>
#include<string>
using namespace std;class Memorandum {
};class GameRole {
private:int level;int time;string package;// GameRole 的内部类 RoleMemorandumclass RoleMemorandum : public Memorandum {private:int level;int time;string package;public:RoleMemorandum(int level, int time, string package) : level(level), time(time), package(package) {}int getLevel() {return this->level;}int getTime() {return this->time;}string getPackage() {return this->package;}};
public:void initState() {this->level = 0;this->time = 0;this->package.clear();}void play() {this->level++;this->time++;this->package += "不朽盾 ";}RoleMemorandum* saveState() {RoleMemorandum* roleMemorandum = new RoleMemorandum(this->level, this->time, this->package);return roleMemorandum;}void recoverState(Memorandum* memorandum) {RoleMemorandum* roleMemorandum = (RoleMemorandum*)memorandum; //需要强制类型转换this->level = roleMemorandum->getLevel();this->time = roleMemorandum->getTime();this->package = roleMemorandum->getPackage();}void showState() {cout << "等级:" << this->level << endl;cout << "游戏时长:" << this->time << endl;cout << "背包:" << this->package << endl;cout << endl;}
};class RoleCaretaker {
private:Memorandum* memorandum;
public:Memorandum* getMemorandum() {return this->memorandum;}void setMemorandum(Memorandum* memorandum) {this->memorandum = memorandum;}
};int main() {RoleCaretaker* roleCaretaker = new RoleCaretaker();GameRole* role = new GameRole();//初始化role->initState();role->showState();//保存参数roleCaretaker->setMemorandum(role->saveState());//进行游戏role->play();role->showState();//回档role->recoverState(roleCaretaker->getMemorandum());role->showState();return 0;
}

24.4 优缺点

24.4.1 优点

提供了一种可以恢复状态的机制,当用户需要时能够比较方便的将数据恢复到某个历史状态。
实现了内部状态的封装,除了创建他的发起人之外,其他对象都不能访问这些装态信息。
简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中并由管理者进行管理,符合单一职责原则。

24.4.2 缺点

资源消耗大,如果要保存的内部状态信息过多或者特别频繁,内存资源占用大。

24.5 使用场景

需要保存和恢复数据的场景。
需要提供一个可回滚操作的场景。

return 设计模式概述;

返回设计模式概述

http://www.jmfq.cn/news/4948885.html

相关文章:

  • 新民电子网站建设哪家好/武汉网站推广排名
  • 个人网站制作网站/国外搜索引擎大全百鸣
  • 网站结构合理/网盘搜索
  • 怎样才能把网站宣传做的更好/做网销的一天都在干嘛
  • 湖南建站网站/网络推广免费网站
  • 网站有哪些后台/推广网络广告
  • 加快wordpress图片的插件/惠州seo快速排名
  • 怎么建立网站赚钱/专业网络推广公司排名
  • 一块钱购物网站/深圳抖音推广公司
  • 自己电脑做网站服务器违法吗/重庆森林壁纸
  • 建设领域行政处罚查询网站/自动引流免费app
  • 做淘宝客网站制作教程视频教程/今日小说搜索百度风云榜
  • iis7配置多个网站/百度云app
  • 网站备案取消前置审批/长春seo优化企业网络跃升
  • 南京网站优化方案/广州网站优化页面
  • 网站建设www.com/优化法治化营商环境
  • 初中生做网站挣钱/廊坊seo外包
  • 如何把自己电脑做网站服务器/百度seo策略
  • 制作个人网站素材/商丘网站建设公司
  • 珠江网站建设/推广软文范文
  • 兰州seo网站排名/微信运营
  • 济南做网站公司电话/百度推广获客
  • 专业做汽车的网站/百度浏览器网址链接
  • 网页模板是已经做好的/公众号排名优化软件
  • 我要做网站推广/搜索大全搜索引擎
  • 网站建设费会计账务处理/在线代理浏览国外网站
  • 如何找做网站的公司/微营销软件
  • 怎样做网站备案/竞价推广账户竞价托管
  • 收益网站制作/百度seo搜索引擎优化方案
  • 津南做网站的公司/百度小说排行榜总榜