备忘录模式

发布时间 2023-11-23 08:13:01作者: 小旺财

类图:

 

Java代码:

复制代码
import java.util.ArrayList;
import java.util.List;

public class Caretaker {
    private List<Memento> list=new ArrayList<>();
    public Memento getMemento() {
        Memento mm=list.get(list.size()-2);
        list.remove(list.size()-2);
        return mm;
    }
    public void setMemento(Memento memento) {
        list.add(memento);
    }
}


public class Memento {
    private String account;
    private String password;
    private String telNo;
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getTelNo() {
        return telNo;
    }
    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }
    public Memento(String account, String password, String telNo) {
        this.account = account;
        this.password = password;
        this.telNo = telNo;
    }
    
}

public class UserInfoDTO {
    private String account;
    private String password;
    private String telNo;
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getTelNo() {
        return telNo;
    }
    public void setTelNo(String telNo) {
        this.telNo = telNo;
    }
    
    public Memento saveMemento() {
        return new Memento(account,password,telNo);
    }
    public void restoreMemento(Memento memento) {
        this.account=memento.getAccount();
        this.password=memento.getPassword();
        this.telNo=memento.getTelNo();
    }
    public void show() {
        System.out.println("Account:"+this.account);
        System.out.println("Password:"+this.password);
        System.out.println("TelNo:"+this.telNo);
    }
    
}

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UserInfoDTO user=new UserInfoDTO();
        Caretaker c=new Caretaker();
        
        user.setAccount("zhangsan");
        user.setPassword("123456");
        user.setTelNo("1310000000");
        System.out.println("状态一:");
        user.show();
        c.setMemento(user.saveMemento());
        System.out.println("-----------------------------");
        
        user.setPassword("111111");
        user.setTelNo("1310001111");
        System.out.println("状态二:");
        user.show();
        c.setMemento(user.saveMemento());
        System.out.println("-----------------------------");
        
        user.setPassword("zyx666");
        user.setTelNo("15733333333");
        System.out.println("状态三:");
        user.show();
        c.setMemento(user.saveMemento());
        System.out.println("-----------------------------");
        
        user.setPassword("777777");
        user.setTelNo("15511111111");
        System.out.println("状态四:");
        user.show();
        c.setMemento(user.saveMemento());
        System.out.println("-----------------------------");
        
        user.setPassword("666666");
        user.setTelNo("17455555555");
        System.out.println("状态五:");
        user.show();
        c.setMemento(user.saveMemento());
        System.out.println("-----------------------------");
        
        
        user.restoreMemento(c.getMemento());
        System.out.println("回到状态四:");
        user.show();
        System.out.println("-----------------------------");
        
        user.restoreMemento(c.getMemento());
        System.out.println("回到状态三:");
        user.show();
        System.out.println("-----------------------------");
        
        user.restoreMemento(c.getMemento());
        System.out.println("回到状态二:");
        user.show();
        System.out.println("-----------------------------");
        
        user.restoreMemento(c.getMemento());
        System.out.println("回到状态一:");
        user.show();
        System.out.println("-----------------------------");
    }

}
 
 

C++代码:

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

    Memento* saveMemento() {
        return new Memento(account,password,telNo);
    }
    void restoreMemento(Memento *memento) {
        this->account=memento->getAccount();
        this->password=memento->getPassword();
        this->telNo=memento->getTelNo();
    }
    void show() {
        cout<<"Account:"<<this->account<<endl;
        cout<<"Password:"<<this->password<<endl;
        cout<<"TelNo:"<<this->telNo<<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("zhangsan");
        user->setPassword("123456");
        user->setTelNo("1310000000");
        cout<<"状态一:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setPassword("111111");
        user->setTelNo("1310001111");
        cout<<"状态二:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setPassword("zyx666");
        user->setTelNo("15733333333");
        cout<<"状态三:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setPassword("777777");
        user->setTelNo("15511111111");
        cout<<"状态四:"<<endl;
        user->show();
        c->setMemento(user->saveMemento());
        cout<<"-----------------------------"<<endl;

        user->setPassword("666666");
        user->setTelNo("17455555555");
        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;

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

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