首页 > 其他分享 >11.1

11.1

时间:2024-11-20 10:21:22浏览次数:1  
标签:originator String 11.1 备忘录 state public Memento

备忘录模式

下面是一个简单的备忘录模式的示例代码,使用Java语言实现:

// 备忘录类
class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}

// 发起人类
class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public Memento createMemento() {
        return new Memento(state);
    }

    public void restoreMemento(Memento memento) {
        this.state = memento.getState();
    }
}

// 管理者类
class Caretaker {
    private Memento memento;

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

    public Memento getMemento() {
        return memento;
    }
}

// 测试类
public class MementoPatternExample {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        // 设置初始状态
        originator.setState("State 1");
        System.out.println("初始状态:" + originator.getState());

        // 保存状态
        caretaker.setMemento(originator.createMemento());

        // 修改状态
        originator.setState("State 2");
        System.out.println("修改后的状态:" + originator.getState());

        // 恢复状态
        originator.restoreMemento(caretaker.getMemento());
        System.out.println("恢复后的状态:" + originator.getState());
    }
}

在上述示例中,我们定义了三个类:Memento(备忘录类)、Originator(发起人类)和Caretaker(管理者类)。发起人类保存当前状态、创建备忘录对象、恢复状态;备忘录类存储状态信息;管理者类负责保存备忘录对象。

在测试类中,我们创建了一个发起人对象和一个管理者对象。我们通过设置初始状态、创建备忘录、修改状态、恢复状态的步骤来演示备忘录模式的使用。通过保存和恢复备忘录对象,我们可以在需要时回滚到之前的状态。

这个简单的示例展示了备忘录模式的基本结构和使用方法。实际应用中,可以根据具体需求扩展和优化备忘录模式的实现。

标签:originator,String,11.1,备忘录,state,public,Memento
From: https://www.cnblogs.com/luoqingci/p/18556278

相关文章

  • 11.19
    C++代码实现:cppincludeincludeinclude<unordered_map>usingnamespacestd;intmain(){intV,E;cin>>V>>E;//错误处理:顶点个数为0if(V==0){cout<<"error"<<endl;return0;}//错误处理:顶点个数为1,且边个数大于0if......
  • 11.19随笔
    这里是11.19随笔。题目留档:使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。输入格式:输入正确的表达式(可以有空格)后回车,得到后缀表达式和结果。输入括号缺失的表达式,输......
  • 11.19
    refuse用法搭配基本含义和用法‌:refuse的基本意思是“拒绝”,表示由于不情愿或不愿意而对某项要求或事物给予否定的回答或不接受某物或不肯做某事。refuse既可用作及物动词,也可用作不及物动词。用作及物动词时,可接名词、代词或动词不定式作宾语,有时也可接双宾语,其间接宾语可以转化......
  • 每日打卡 11.19 (2)
    includeinclude<string.h>include<windows.h>usingnamespacestd;structstudent{charname[10];intc,math,english;doubleaverage;};intmain(){intindex,n;structstudents[10],temp;cout<<"请输入学生人数:";cin>>......
  • 每日打卡 11.19
    includeinclude<string.h>include<windows.h>usingnamespacestd;structstudent{charname[10];intc,math,english;doubleaverage;};intmain(){intindex,n;structstudents[10],temp;cout<<"请输入学生人数:";cin>>n......
  • 2024.11.19 test
    A给定一个无限长序列的\(0\simn-1\)项,每项满足与\(n\)的差不超过\(1\)。之后的每一项满足\(a_i=\sum_{j=0}^{i-1}[a_j+j\gei]\)。\(q\)次询问第\(p\)个位置的值。\(p\le10^{15}\)。非常难的签到,考虑消去常数,将\(a_i\)全部减去\(n\),那么\(a_i=[a_{i-n-1}=1]-[a_......
  • [考试记录] 2024.11.19 noip模拟赛17
    T1选取字符串warning❗:本题解前缀含量过高。挺典的kmp。考虑到题目中的串都是一个串的前缀,那么所选出来的串,他们的前缀一定是最短的那个串。不妨直接枚举每一个前缀,也就是枚举每一个串,看他们是否可以作为前缀出现,hash即可,复杂度\(\mathcal{O}(N^2)\)。换个思路,考虑有多......
  • 11.16
    @所有人网络安全C10-2024.11.17作业:水平越权&垂直越权漏洞实验水平越权垂直越权密码修改逻辑漏洞实验3、验证码安全(1)验证码绕过(onclient)+验证码绕过(onserver)在client于server中由于验证码在使用后没有即使的在服务器段刷新或者作废,所以可以重复使用验证码绕过(onserver)实验中,......
  • 24.11.19
    今日写大作业实验三:JFinal极速开发框架实验 (2024.11.29日前完成)    根据参考资料,学习JFinal极速开发框架的使用并如下任务:    任务一:了解Maven及其使用方法,总结其功能作用(占20%)    任务二:学习JFinal框架,基于Maven建立JFinal工程,并对JFinal框架功能进行总结介绍(占3......
  • 11.19 CW 模拟赛 T1.谁开了小号
    算法嗯,和赛时做法也是没有一点相似之处,寄!挂个\(\rm{TJ}\)题解下载对于暴力,显然可以用\(\rm{dfs}\)实现,这种\(\rm{dfs}\)我还没有见过大概有个想法,每次有两种选择,要么新开集合,要么从前面加一个进去,大概就这样,也比较简单,剪剪枝小数据包过的正解做......