设计模式——备忘录模式

230 阅读1分钟

最新修改已更新到github

备忘录模式_保存对象状态快照

/**
 * 快照
 * @author maikec
 * @date 2019/5/16
 */
public class Snapshot {
    @Getter
    private String name;
    public Snapshot(String name){
        this.name = name;
    }
}

**
 * 备忘录
 * @author maikec
 * @date 2019/5/16
 */
public class MementoHelper {
    private final List<Snapshot> snapshots = new LinkedList<>(  );

    /**
     * 记录快照
     * @param snapshot
     */
    public void recordSnapshot(Snapshot snapshot){
        Assert.notNull( snapshot );

        if (!snapshots.contains( snapshot )){
            ReentrantReadWriteLock.WriteLock writeLock = new ReentrantReadWriteLock().writeLock();
            if (writeLock.tryLock()){
                if (snapshots.size() == 0){
                    snapshots.add( snapshot );
                }
                if (snapshots.size() > 0 && !snapshots.contains( snapshot )){
                    snapshots.add( snapshot );
                }
            }
        }
    }

    /**
     * 获取指定索引的快照
     * @param index
     * @return
     */
    public Snapshot getSnapshot(int index){
        if (snapshots.size() < 1){
            throw new IllegalStateException( "Should Record Snapshot First" );
        }
        Assert.checkBetween( index,0,snapshots.size()-1 );
        return snapshots.get( index );
    }
}

附录

github.com/maikec/patt… 个人GitHub设计模式案例

声明

引用该文档请注明出处