备忘录模式,拍电影

        剧组在拍戏,演员深情的讲着自己的独白“该配合你演出的我演视而不见,在逼一个最爱你的人即兴表演”,导演看后并不满意要重拍第二句,场记会记录演员重拍时的布景、台词、演员的动作表情,等到重拍的时候恢复到此状态。

模式定义: 在不破坏封装性的前提下,获取到一个对象的内部状态,并在对象之外记录或保存这个状态。
案例说明: 拍电影不可能一次过,出现NG也没必要从头再拍,通过场记管理NG桥段的布景、演员台词、动作等进行重拍,这看起像事务回滚。
优点: 提供了一种可以恢复状态的机制。
注意: 为了节约内存,可使用原型模式+备忘录模式

代码:演员

public class Actor {

    //台词
    private String lines = "该配合你演出的我演视而不见,在逼一个最爱你的人即兴表演。";

    //讲台词
    public void say() {
        System.out.println("演员:"+lines);
    }

    public Memento saveStateToMemento(){
        return new Memento("在逼一个最爱你的人即兴表演");
    }

    public void getStateFromMemento(Memento Memento){
        lines = Memento.lines;
    }
}
导演
public class Director {

    //是否要NG
    public static boolean isNG() {
        System.out.println("导演:第二句表情没到位,重拍这一句");
        return true;
    }
}
场记
public class Supervisor {

    private Memento memento;

    //获取备份
    public Memento getMemento() {
        return memento;
    }

    //保存备份
    public void setMemento(Memento memento) {
        this.memento = memento;
    }

}
台词记录
public class Memento {
    public String lines;

    public Memento(String lines) {
        this.lines = lines;
    }
}
测试
public class Test {

    public static void main(String arg[]) {
        Actor actor = new Actor();
        actor.say();//演员讲台词
        if (Director.isNG()) {
            Supervisor supervisor = new Supervisor();
            supervisor.setMemento(actor.saveStateToMemento());//场记记录

            System.out.println("------休息过后,重拍------");
            actor.getStateFromMemento(supervisor.getMemento());//演员通过场记获得重演台词
            actor.say();
        }
    }

}
结果
演员:该配合你演出的我演视而不见,在逼一个最爱你的人即兴表演。
导演:第二句表情没到位,重拍这一句
------休息过后,重拍-----
演员:在逼一个最爱你的人即兴表演





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值