動作モードどうさもーど:メモリモードきおくもーど


紹介する


カプセル化したまま、オブジェクトの内部状態を外部に保存する方法です.オブジェクトの状態を外部に保存し、その状態に戻すことができます.

1)メリット


ステータスオブジェクトスナップショットは、
  • をカプセル化したまま作成できます.
  • オブジェクトの状態を保存して復元する役割は、Care Takerに委任できます.
  • オブジェクトのステータスが変更されても、クライアントコードは変更されません.
  • 2)欠点


    大量の情報を格納するMememberを頻繁に作成すると、メモリの使用量に悪影響を及ぼします.

    インプリメンテーション


    1)Memantoクラスの実装

    @Getter
    public final class GameSave {
    	private final int blueTeamScore;
        private final int redTeamScore;
        
        public GameSave(int blueTeamScore, int redTeamScore) {
        	this.blueTeamScore = blueTeamScore;
            this.redTeamScore = redTeamScore;
        }
    }

    2)Originator実施

    @Getter
    @Setter
    public class Game {
    	private int redTeamScore;
        private int blueTeamScore;
        
        public GameSave save() {
        	return new GameSave(this.blueTeamScore, this.redTeamScore);
        }
        
        public void restore(GameSave gameSave) {
        	this.blueTeamScore = gameSave.getBlueTeamScore();
            this.redTeamScore = gameSave.getRedTeamScore();
        }
    }

    使用

    public class Client {
    	public static void main(String[] args) {
        	Game game = new Game();
            game.getBlueTeamScore(10);
            game.getRedTeamScore(20);
            
            GameSave save = game.save();
            game.setBlueTeamScore(12);
            game.setRedTeamScore(22);
            game.restore(save);
        }
    }