设计模式-备忘录模式

定义:保存对象的某个状态,以便在适当的时候恢复对象,备忘录模式属于行为型模式。

优点:给用户提供了一种可以保存状态的机制,可以让用户回到历史状态,而且这个过程不需要用户去关注保存的细节。

缺点:如果对象的成员变量过多,保存状态则需要耗费大量资源

举个栗子:

目标对象类:

public class TargetObject {
    private String state;

    public TargetObject(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
    public MemoryObject saveState(){
        return  new MemoryObject(state);
    }
    public void retrivestate(MemoryObject memoryObject){
        state=memoryObject.getState();
    }
}
状态类:
public class MemoryObject {
    private String state;

    public MemoryObject(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

}

状态管理类:

public class ManageStateUtil {
    private static List<MemoryObject> memoryObjectList=new ArrayList<>();
    public static void addMemoryObject(MemoryObject memoryObject){
        memoryObjectList.add(memoryObject);
    }
    public static MemoryObject getMemoryObject(int index){
       return memoryObjectList.get(index);
    }
}

client:

TargetObject targetObject = new TargetObject("state001");
        targetObject.setState("state002");
        ManageStateUtil.addMemoryObject(targetObject.saveState());
        targetObject.setState("state003");
        ManageStateUtil.addMemoryObject(targetObject.saveState());
        targetObject.setState("state004");

        Log.d(TAG, "onCreate: "+targetObject.getState());
        targetObject.retrivestate(ManageStateUtil.getMemoryObject(0));
        Log.d(TAG, "onCreate: "+targetObject.getState());
        targetObject.retrivestate(ManageStateUtil.getMemoryObject(1));
        Log.d(TAG, "onCreate: "+targetObject.getState());

输出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值