java设计模式进阶_memento

原创 2016年08月30日 14:43:48

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : StarMemento.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public interface StarMemento {
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : StarMementoInternal.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class StarMementoInternal implements StarMemento {

    private StarType type;
    private int ageYears;
    private int massTons;

    public StarType getType() {
        return type;
    }

    public void setType(StarType type) {
        this.type = type;
    }

    public int getAgeYears() {
        return ageYears;
    }

    public void setAgeYears(int year) {
        this.ageYears = year;
    }

    public int getMassTons() {
        return massTons;
    }

    public void setMassTons(int massTons) {
        this.massTons = massTons;
    }
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Star.java
//  @ Date : 2016/8/30
//  @ Author : 
//
//




public class Star {
    private StarType type;
    private int ageYears;
    private int massTons;

    public Star(StarType type, int startAge, int startMass) {
        this.type = type;
        this.ageYears = startAge;
        this.massTons = startMass;
    }

    public void timePasses() {
        ageYears *= 2;
        massTons *= 8;
        switch(type)
        {
        case RED_GIANT:
            type = StarType.WHITE_DWARF;
            break;
        case SUN:
            type = StarType.RED_GIANT;
            break;
        case SUPERNOVA:
            type = StarType.DEAD;
            break;
        case WHITE_DWARF:
            type = StarType.SUPERNOVA;
            break;
        case DEAD:
            ageYears *= 2;
            massTons = 0;
            break;
        default:
            break;
        }
    }

    public StarMemento getMemento() {
        StarMementoInternal state = new StarMementoInternal();
        state.setAgeYears(ageYears);
        state.setMassTons(massTons);
        state.setType(type);
        return state;
    }

    public void setMemento(StarMemento memento) {
        StarMementoInternal state = (StarMementoInternal)memento;
        this.type = state.getType();
        this.ageYears = state.getAgeYears();
        this.massTons = state.getMassTons();
    }

    public String toString() {
        return String.format("%s age: %d years mass: %d tons", type.toString(),ageYears,massTons);
    }
}

public enum StarType {

    SUN("sun"),//太阳
    RED_GIANT("red giant"),//巨人
    WHITE_DWARF("white dwarf"),//白色-矮人
    SUPERNOVA("supernova"),//超新星
    DEAD("dead star"),//废星
    UNDEFINED("")//未命名
    ;
    private String title;

    StarType(String title){
        this.title = title;
    }

    public String toString()
    {
        return title;
    }

}


import java.util.Stack;

public class App {

    public static void main(String[] args) {
        Stack<StarMemento> states = new Stack<>();

        Star star = new Star(StarType.SUN,10000000,500000);
        System.out.println(star);
        states.add(star.getMemento());
        star.timePasses();
        System.out.println(star);
        states.add(star.getMemento());
        star.timePasses();
        System.out.println(star);
        states.add(star.getMemento());
        star.timePasses();
        System.out.println(star);
        states.add(star.getMemento());
        star.timePasses();
        System.out.println(star);
        while(states.size() > 0)
        {
            star.setMemento(states.pop());
            System.out.println(star);
        }
    }

}

/*sun age: 10000000 years mass: 500000 tons
red giant age: 20000000 years mass: 4000000 tons
white dwarf age: 40000000 years mass: 32000000 tons
supernova age: 80000000 years mass: 256000000 tons
dead star age: 160000000 years mass: 2048000000 tons
supernova age: 80000000 years mass: 256000000 tons
white dwarf age: 40000000 years mass: 32000000 tons
red giant age: 20000000 years mass: 4000000 tons
sun age: 10000000 years mass: 500000 tons
*/







版权声明:本文为博主原创文章,未经博主允许不得转载。

Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式

在大部分游戏中,都有一个“存档点”的概念。例如,在挑战boss前,游戏会在某个地方存档,如果玩家挑战boss失败,则会从这个存档点开始重新游戏。因此,我们可以将这个“存档点”当成是一个备忘录,我们将此...
  • Froser
  • Froser
  • 2014年04月17日 21:00
  • 1157

JAVA设计模式(20):行为型-备忘录模式(Memento)

场景 录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,此时需要恢复上一个人的资料,再进行修改。word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word提示恢复到以前的文档。管...

java设计模式之备忘录模式Memento

一、什么是备忘录模式     Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 二、备忘录模式的...

设计模式学习笔记---备忘录模式memento pattern(Java版)

一、场景 录入大批人员资料,当正在录入当前人资料时,发现上一个人录错了 此时需要恢复上一个人的资料,再进行修改。 Word文档编辑时,忽然电脑死机或断电,再打开时可以看到word 提示你恢复到...

浅谈JAVA设计模式之——备忘录模式(Memento)

一、概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 二、适用性 1.必须保存一个对象在某一个时刻的(部分)状态,这样以后需...

Java设计模式十五:备忘录模式(Memento)

备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,属于行为模式。它是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先...

java设计模式十六--Memento(备忘录模式)

备忘录模式 定义: 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 涉及角色: 1.Originator(发起人): 负...
  • hfmbook
  • hfmbook
  • 2012年06月26日 14:09
  • 1329

Java设计模式——备忘录模式(Memento)

又名快照模式或者token模式 备忘录对象是一个用来存储另一个对象内部状态的快照(snapshot)的对象。备忘录模式用意是在不破坏封装的条件下,将下一个对象的状态捕捉(capture),并外部化(...

java设计模式-备忘录模式(Memento)

一、什么是备忘录模式     Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 二、备忘录模式的应用...

JAVA--备忘录模式(Memento)--设计模式十九

1,概述:       (1)备忘录模式的意图就是为对象提供存储和恢复功能              (2)主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_memento
举报原因:
原因补充:

(最多只允许输入30个字)