행동 패턴: 메멘토 패턴

xellos·2022년 4월 15일
0

디자인 패턴

목록 보기
19/20

소개

캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법이다. 객체 상태를 외부에 저장했다라 해당 상태로 다시 복구시킬 수 있다.

1) 장점

  1. 캡슐화를 지키면서 상태 객체 스냅샷을 만들 수 있다.
  2. 객체 상태를 저장하고 또 복원하는 역할을 Care Taker에게 위임할 수 있다.
  3. 객체 상태가 바뀌어도 클라이언트 코드는 변경되지 않는다.

2) 단점

  1. 많은 정보를 저장하는 Mememtor를 자주 생성하는 경우 메모리 사용량에 부정적인 영향을 줄 수 있다.

구현

1) 메멘토 클래스 구현

@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);
    }
}

0개의 댓글