Java的设计模式-----备忘录模式

来源:互联网 发布:淘宝上的迪奥是真的吗 编辑:程序博客网 时间:2024/06/05 05:26

备忘录模式(Memonto Pattern)


在不被破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。


优点:实现新的封装和提供了状态恢复的实现机制


缺点:资源消耗过大


模式结构:
图片描述



1.Originator(原发器)

保存内部状态的类称为原发器。原发器可以创建一个备忘录,并存储它的当前状态,也可以使用备忘录来恢复其内部状态。

2.Memonto(备忘录)
备忘录对象不能直接被其他类使用,根据原发器来决定保存哪些内部状态。如果你想学习Java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载。

3.Caretaker(负责人)
负责人又称管理者,它负责保存备忘录,但不能对备忘录的内容进行检查或者操作。它可以保存一个或者多个备忘录对象。


例子恢复用户信息


原发器UserInfoOriginator

包memento_22_1; / **  *用户信息类(原发器) * / public class UserInfoOriginator {     //用户名    private String username;     //密码    private String password;     //电话号码    private String phoneNumber;     public String getUsername()    {         return username;     }     public void setUsername(String username)    {         this.username = username;     }     public String getPassword()    {         return password;     }     public void setPassword(String password)    {         this.password = password;     }     public String getPhoneNumber()    {         return phoneNumber;     }     public void setPhoneNumber(String phoneNumber)    {         this.phoneNumber = phoneNumber;     }     / **      *保存备忘录     * @return返回一个新的备忘录对象     * /     public Memento saveMemento()    {         return new Memento(username,password,phoneNumber);     }     / **      *恢复备忘录对象     * @param memento      * /     public void restoreMemento(Memento memento)    {         this.username = memento.getUsername();         this.password = memento.getPassword();         this.phoneNumber = memento.getPhoneNumber();     }     / **      *显示用户信息     * /     public void show()    {         System.out.println(“username:”+ username);         System.out.println(“password:”+ password);         System.out.println(“phoneNumber:”+ phoneNumber);     } }

2.备忘录

包memento_22_1; / **  *备忘录 * / public class Memento {     //用户名    private String username;     //密码    private String password;     //电话号码    private String phoneNumber;     public Memento()    {     }     public Memento(String username,String password,String phoneNumber)    {         this.username = username;         this.password = password;         this.phoneNumber = phoneNumber;     }     public String getUsername()    {         return username;     }     public void setUsername(String username)    {         this.username = username;     }     public String getPassword()    {         return password;     }     public void setPassword(String password)    {         this.password = password;     }     public String getPhoneNumber()    {         return phoneNumber;     }     public void setPhoneNumber(String phoneNumber)    {         this.phoneNumber = phoneNumber;     } }

3.负责人

包memento_22_1; / **  *负责人 * / public class Caretaker {     private Memento memento;     public Memento getMemento()    {         return memento;     }     public void setMemento(Memento memento)    {         this.memento = memento;     } }

4.测试类(初始状态--->修改状态--->恢复状态)

包memento_22_1; / **  *测试类 * / public class Test {     public static void main(String [] args)    {         //创建原发器        UserInfoOriginator originator = new UserInfoOriginator();         //创建负责人        Caretaker taker = new Caretaker();         originator.setUsername( “张三”);         originator.setPassword( “123456”);         originator.setPhoneNumber( “13800138000”);         show(发起人,“初始状态”);         //保存状态        taker.setMemento(originator.saveMemento());         //修改密码和电话号码        originator.setPassword( “654321”);         originator.setPhoneNumber( “1323270755x”);         show(originator,“修改状态”);         //恢复状态一        originator.restoreMemento(taker.getMemento());         show(发起者,“恢复到初始状态”);     }     private static void show(UserInfoOriginator originator,String status)    {         System.out.println(status +“:”);         originator.show();         的System.out.println( “-----------------------”);     } }

运行结果
图片描述

阅读全文
0 0
原创粉丝点击