메멘토패턴 2부 패턴적용하기

2022-07-10-메멘토패턴-2부-패턴적용하기

목차

01.메멘토 패턴 적용하기

01.1 Game 코드 변경

01.2 Client 코드 변경

01.메멘토 패턴 적용하기

  • Client를 careTaker로쓰기
  • memento역할이 중요 상태를 저장할것은

    • GameSave로 클래스 생성
    public final class GameSave {
    
        private final int blueTeamScore;
    
        private final int redTeamScore;
    
        public GameSave(int blueTeamScore, int redTeamScore) {
            this.blueTeamScore = blueTeamScore;
            this.redTeamScore = redTeamScore;
        }
    
        public int getBlueTeamScore() {
            return blueTeamScore;
        }
    
        public int getRedTeamScore() {
            return redTeamScore;
        }
    }
    • 상태 정보가 바뀌면 안된다 그래서 final을 사용함

01.1 Game 코드 변경

  • before

    import java.io.Serializable;
    
    public class Game implements Serializable {
    
      private int redTeamScore;
    
      private int blueTeamScore;
    
      public int getRedTeamScore() {
          return redTeamScore;
      }
    
      public void setRedTeamScore(int redTeamScore) {
          this.redTeamScore = redTeamScore;
      }
    
      public int getBlueTeamScore() {
          return blueTeamScore;
      }
    
      public void setBlueTeamScore(int blueTeamScore) {
          this.blueTeamScore = blueTeamScore;
      }
    }
  • after

    public class Game {
    
      private int redTeamScore;
    
      private int blueTeamScore;
    
      public int getRedTeamScore() {
          return redTeamScore;
      }
    
      public void setRedTeamScore(int redTeamScore) {
          this.redTeamScore = redTeamScore;
      }
    
      public int getBlueTeamScore() {
          return blueTeamScore;
      }
    
      public void setBlueTeamScore(int blueTeamScore) {
          this.blueTeamScore = blueTeamScore;
      }
    
      public GameSave save() {
          return new GameSave(this.blueTeamScore, this.redTeamScore);
      }
    
      public void restore(GameSave gameSave) {
          this.blueTeamScore = gameSave.getBlueTeamScore();
          this.redTeamScore = gameSave.getRedTeamScore();
      }
    
    }
    • GameSave save()
    • restore(GameSave gameSave) 추가

01.2 Client 코드 변경

  • before

    public class Client {
    
      public static void main(String[] args) {
          Game game = new Game();
          game.setRedTeamScore(10);
          game.setBlueTeamScore(20);
    
          int blueTeamScore = game.getBlueTeamScore();
          int redTeamScore = game.getRedTeamScore();
    
          Game restoredGame = new Game();
          restoredGame.setBlueTeamScore(blueTeamScore);
          restoredGame.setRedTeamScore(redTeamScore);
      }
    }
  • after

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

Written by@[KyeongMinPark]
Docker, C++, C#, Java, Golang으로 개발 모니터링운영 및 개발, 자원수집기 Beat & Exporter 개발 Gitlab Runner CI/CD & Hugo 연동과 테스트코드및 등을 공부와 개발중 ORM, TDD, BDD, DDD, DesignPattern, WebAssembly Studying

GitHub