备忘录模式_保存对象状态快照
/**
* 快照
* @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设计模式案例
声明
引用该文档请注明出处