java 备忘录模式_Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式

备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象。

class Memento{

private String value;

public Memento(String value){

this.value = value;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

}

class Storage{

private Memento me;

public Memento getMe() {

return me;

}

public void setMe(Memento me) {

this.me = me;

}

public Storage(Memento me){

this.me = me;

}

}

class Original{

private String value;

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public Original(String value){

this.value = value;

}

public Memento creatMemento(){

return new Memento(value);

}

public void restoreMemento(Memento me){

this.value = me.getValue();

}

}

public class MementoTest {

public static void main(String[] args){

//创建原始类

Original or = new Original("apple");

//创建备忘录

Storage st = new Storage(or.creatMemento());

// 修改原始类的状态

System.out.println("初始化状态为:" + or.getValue());

or.setValue("niu");

System.out.println("修改后的状态为:" + or.getValue());

// 回复原始类的状态

or.restoreMemento(st.getMe());

System.out.println("恢复后的状态为:" + or.getValue());

}

}其实就是做个副本存一下,然后某个时间取出来。

(二十)状态模式

状态模式的意义是将表示对象状态的逻辑分散到代表状态的不同类中。为了处理状态间的迁移,可以让主对象包含一组状态的引用。或者在状态迁移的调用中,将主对象传递给状态改变的类。也可以让状态类的信息提供者仅仅给出下一个状态,而不更新主对象。无论如何管理状态迁移,状态模式都会通过将对象的不同状态操作,分散到一组类集合中,从而简化代码。

class State{

private String value;

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public void method1(){

System.out.println("method1");

}

public void method2(){

System.out.println("method2");

}

}

class Context{

private State state;

public State getState() {

return state;

}

public void setState(State state) {

this.state = state;

}

public Context(State state){

this.state = state;

}

public void method(){

if(state.getValue().equals("state1")){

state.method1();

}else if(state.getValue().equals("state2")){

state.method2();

}

}

}

public class StateTest {

public static void main(String[] args){

State state = new State();

Context context = new Context(state);

state.setValue("state1");

context.method();

state.setValue("state2");

context.method();

}

}

原文:http://blog.csdn.net/fanyun7654/article/details/37760603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值