您的位置:首页 > 编程语言 > Java开发

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

2017-06-06 12:45 513 查看
备忘录模式(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 mement
a95a
o)
    { 
        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( “-----------------------”); 
    } 
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息