行为模式之中备忘录模式

2019-09-19  本文已影响0人  后来丶_a24d

总纲

备忘录模式

备忘录模式uml类图.png
public class Soul {

        private Map<Person, Memory> memoryMap = new HashMap<Person, Memory>();

        //抽离或者说搜集一个人的记忆
        public void pullAwayMemory(Person person){
            memoryMap.put(person, person.getMemory());
        }

        //强行将一个人的记忆固定在某一刻
        public void forceFixMemory(Person person){
            if (memoryMap.containsKey(person)) {
                person.setMemory(memoryMap.get(person));
            }
        }
    }

    public class Person {

        private String name;

        private List<String> storyList;

        public Person(String name){
            this.name = name;
            storyList = new ArrayList<String>();
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getStoryList() {
            return Collections.unmodifiableList(storyList);
        }

        public void addStory(String history) {
            this.storyList.add(history);
        }

        /* 新增 */

        //获取记忆
        public Memory getMemory(){
            Memory memory = new Memory();
            memory.setStoryList(new ArrayList<String>(storyList));
            return memory;
        }

        //恢复记忆
        public void setMemory(Memory memory){
            storyList = memory.getStoryList();
        }

        /* 新增 */

        public String toString(){
            StringBuffer stringBuffer = new StringBuffer(name + "的记忆:\n");
            for(String memory : storyList){
                stringBuffer.append(memory).append("\n");
            }
            return stringBuffer.toString();
        }
    }

    //记忆类(备忘录)
    public class Memory {

        private List<String> storyList;

        public List<String> getStoryList() {
            return storyList;
        }

        public void setStoryList(List<String> storyList) {
            this.storyList = storyList;
        }

    }

    public class Client {

        public static void main(String[] args) {
            Soul soul = new Soul();
            Person personA = new Person("看守所人员A");
            Person personB = new Person("看守所人员B");
            //看守所人员A的记忆
            personA.addStory("小时候偷换男女厕所的牌子");
            personA.addStory("用裤衩上的猴皮筋做成弹弓打别人家玻璃,结果被弹了小JJ");

            //看守所人员B的记忆
            personB.addStory("小时候比谁尿的更高更远,我得了第一,只是不小心方向变成了直上直下,尿到了自己脸上");
            personB.addStory("有一次正上课,不小心放了个屁,结果带出了点杂物,满教室都是臭味熏天");

            System.out.println(personA);
            System.out.println(personB);
            //灵魂(管理者)抽离两个人之前的记忆
            soul.pullAwayMemory(personA);
            soul.pullAwayMemory(personB);
            //两个人看到了小左的技能和面貌
            personA.addStory("有一个人竟然可以飞行,记忆中还记得他的样貌");
            personB.addStory("有一个人竟然可以飞行,记忆中还记得他的样貌");

            System.out.println(personA);
            System.out.println(personB);
            //强行恢复记忆
            soul.forceFixMemory(personA);
            soul.forceFixMemory(personB);

            System.out.println(personA);
            System.out.println(personB);
        }

    }
上一篇 下一篇

猜你喜欢

热点阅读