您当前的位置: 首页 > 

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【设计模式】【21】备忘录模式

命运之手 发布时间:2022-04-29 11:11:28 ,浏览量:1

应用场景

备忘录模式,英文名Memento Pattern

该模式将对象状态封装为一个对象,再通过一个状态管理器对象将状态保存起来,这样就可以实现状态还原功能

该模式主要用于状态回滚的业务场景

代码实现


	public class State {
	    String attribute1;
	    String attribute2;
	    String attribute3;
	}


	public class Saver {
	
	    LinkedList states = new LinkedList();
	
	    public State getLatestState() {
	        return states.getLast();
	    }
	
	    public void saveState(State state) {
	        states.addLast(state);
	    }
	}


	public class Subject {
	
	    State state;
	
	    public State currentState() {
	        return state;
	    }
	
	    public void setState(State state) {
	        this.state = state;
	    }
	}


	public class APP {
	
	    public static void main(String... args) {
	        Subject subject = new Subject();
	        Saver saver = new Saver();
	        State rollbackState = saver.getLatestState();
	        subject.setState(rollbackState);
	        saver.saveState(rollbackState);
	    }
	}

模式扩展

上面的代码是一种标准实现方式,在实际应用中,我们并不一定要严格按照这种方式来做

这里列举一种变形模式

  • 状态发生变更时,不创建新的状态对象,而是直接通过clone进行内存拷贝,创建一个新的对象,直接用新的对象来代替新的状态
  • 通过List保存每个变更点的对象,需要回滚时,直接取出当时的对象来使用即可
  • 如果有额外的状态描述信息需要记录,可以再增加一个Map,来记录每个变更点的状态描述

这个代码比较简单,就没必要再列举出来了

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0389s