软件设计-备忘录模式

2021/12/13 23:16:53

本文主要是介绍软件设计-备忘录模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。

 

类图

 

 

代码

Java

package rjsj.no20;

public class Client {
    public static void main(String[] args) {
        User user = new User();
        Caretaker caretaker = new Caretaker();

        user.setId("20193288");
        user.setPassword("123456");
        caretaker.setMemo(user.saveState());
        System.out.println("״̬һ");
        user.show();
        System.out.println("************************************************************");

        user.setId("20193288");
        user.setPassword("qwerasdfzxcv");
        caretaker.setMemo(user.saveState());
        System.out.println("״̬¶þ");
        user.show();
        System.out.println("************************************************************");

        user.setId("20183288");
        user.setPassword("66666666");
        caretaker.setMemo(user.saveState());
        System.out.println("״̬Ƚ");
        user.show();
        System.out.println("************************************************************");

        System.out.println("ְ²½³·Ϻ²ٗ÷£º");
        System.out.println("»ָ´µ½״̬¶þ");
        user.restoreState(caretaker.getMemo());
        user.show();
        System.out.println("************************************************************");

        System.out.println("»ָ´µ½״̬һ");
        user.restoreState(caretaker.getMemo());
        user.show();
    }
}
package rjsj.no20;

public class Memo {
    private String id;
    private String password;

    public Memo(String id, String password) {
        this.id = id;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
package rjsj.no20;

public class User {
    private String id;
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Memo saveState(){
        return new Memo(id,password);
    }

    public void restoreState(Memo m){
        this.id = m.getId();
        this.password = m.getPassword();
    }

    public void show(){
        System.out.println("id:" + this.id);
        System.out.println("password:" + this.password);
    }
}
package rjsj.no20;

import java.util.ArrayList;
import java.util.List;

public class Caretaker {
    private List<Memo> list = new ArrayList<>();

    public void setMemo(Memo m){
        list.add(m);
    }

    public Memo getMemo(){
        Memo m = list.get( list.size() - 2 );
        list.remove( list.size() - 2 );
        return m;
    }
}

 

 

C++

#include<iostream>
#include <list>
using namespace std;
class Memento {
private:
    string account;
    string password;
public:
    string getAccount() {
        return account;
    }
    void setAccount(string account) {
        this->account = account;
    }
    string getPassword() {
        return password;
    }
    void setPassword(string password) {
        this->password = password;
    }
    Memento(string account, string password) {
        this->account = account;
        this->password = password;
    }
};
class UserInfoDTO {
private:
    string account;
    string password;
public:
    string getAccount() {
        return account;
    }
    void setAccount(string account) {
        this->account = account;
    }
    string getPassword() {
        return password;
    }
    void setPassword(string password) {
        this->password = password;
    }

    Memento* saveMemento() {
        return new Memento(account,password);
    }
    void restoreMemento(Memento *memento) {
        this->account=memento->getAccount();
        this->password=memento->getPassword();
    }
    void show() {
        cout<<"Account:"<<this->account<<endl;
        cout<<"Password:"<<this->password<<endl;
    }
};
class Caretaker {
private:
    list<Memento*> ll;
public:
    Memento* getMemento() {
        ll.pop_front();
        Memento* mm=ll.front();
        return mm;
    }
    void setMemento(Memento *memento) {
        ll.push_front(memento);
    }
};
int main(){
        UserInfoDTO *user=new UserInfoDTO();
        Caretaker *c=new Caretaker();

        user->setAccount("张三");
        user->setPassword("123456");
        cout<<"状态一:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setAccount("李四");
        user->setPassword("lisi666");
        cout<<"状态二:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setAccount("王五");
        user->setPassword("88888888");
        cout<<"状态三:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;


        user->restoreMemento(c->getMemento());
        cout<<"回到状态二:"<<endl;
        user->show();
        cout<<"-----------------------------"<<endl;

        user->restoreMemento(c->getMemento());
        cout<<"回到状态一:"<<endl;
        user->show();
        cout<<"-----------------------------"<<endl;
}

 

运行截图

 



这篇关于软件设计-备忘录模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程