美文网首页
23种设计模式-备忘录模式(使命召唤)

23种设计模式-备忘录模式(使命召唤)

作者: 王灵 | 来源:发表于2019-02-28 10:52 被阅读0次

    定义:在不破环封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。
    使用场景:
    1、需要保存一个对象在某一时刻的状态或部分状态。
    2、如果用一个接口来让其它对象获得这些状态,将会暴露对象的实现细节并破坏对象的封装性,一个对象不希望外界直接访问其内部状态,通过中间对象可以间接访问其内部状态。
    游戏存档简单使用

    /**
     * 数据bean
     */
    public class Memoto {
        public int mCheckpoint;
        public int mLifeValue;
        public String mWeapon;
    
        @Override
        public String toString() {
            return "Memoto{" +
                    "mCheckpoint=" + mCheckpoint +
                    ", mLifeValue=" + mLifeValue +
                    ", mWeapon='" + mWeapon + '\'' +
                    '}';
        }
    }
    
    
    /**
     * 备忘录的操作者
     */
    public class Caretaker {
        Memoto mMemoto;
    
        public Memoto getmMemoto() {
            return mMemoto;
        }
    
        public void archive(Memoto mMemoto) {
            this.mMemoto = mMemoto;
        }
    }
    
    /**
     * 使命召唤游戏(数据模型可能不太合理,这里我们这是简单演示)
     */
    public class CallofDuty {
        private int mCheckpoint=1;
        private int mLifeValue=100;
        private String mWeapon="沙漠之鹰";
        /**
         * 玩游戏
         */
        public void play(){
            Log.e("玩游戏:"+String.format("第%d关",mCheckpoint)+"奋战杀敌中");
            mLifeValue-=10;
            Log.e("进度升级了");
            mCheckpoint++;
            Log.e("到达"+String.format("第%d关",mCheckpoint));
        }
        /**
         * 退出游戏
         */
        public void quit(){
            Log.e("------------");
            Log.e("退出前的游戏属性:"+this.toString());
            Log.e("退出游戏");
            Log.e("------------");
        }
        /**
         * 创建备忘录
         */
        public Memoto creatMemoto(){
            Memoto memoto=new Memoto();
            memoto.mCheckpoint=mCheckpoint;
            memoto.mLifeValue=mLifeValue;
            memoto.mWeapon=mWeapon;
            return memoto;
        }
        /**
         * 恢复游戏
         */
        public void restore(Memoto memoto){
            this.mCheckpoint=memoto.mCheckpoint;
            this.mLifeValue=memoto.mLifeValue;
            this.mWeapon=memoto.mWeapon;
            Log.e("恢复后的游戏属性:"+this.toString());
        }
    
        @Override
        public String toString() {
            return "CallofDuty{" +
                    "mCheckpoint=" + mCheckpoint +
                    ", mLifeValue=" + mLifeValue +
                    ", mWeapon='" + mWeapon + '\'' +
                    '}';
        }
    }
    
    
    public class Client {
        public static void main(String[] args){
            //构建游戏对象
            CallofDuty game=new CallofDuty();
            //1.打游戏
            game.play();
    
            Caretaker caretaker=new Caretaker();
            //2.游戏存档
            caretaker.archive(game.creatMemoto());
            //3.退出游戏
            game.quit();
            //4.恢复游戏
            CallofDuty newGame=new CallofDuty();
            newGame.restore(caretaker.getmMemoto());
        }
    }
    
    

    相关文章

      网友评论

          本文标题:23种设计模式-备忘录模式(使命召唤)

          本文链接:https://www.haomeiwen.com/subject/wrfhuqtx.html