From dd7b922f2bb0e738a3926583cb5199ed888ef793 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Wed, 24 Jul 2019 08:17:58 +0200 Subject: [PATCH] [BAEL-3090] Added example --- .../com/baeldung/memento/Coordinates.java | 12 ++++++++ .../java/com/baeldung/memento/TextEditor.java | 19 ++++++++++++ .../java/com/baeldung/memento/TextWindow.java | 30 +++++++++++++++++++ .../com/baeldung/memento/TextWindowState.java | 14 +++++++++ 4 files changed, 75 insertions(+) create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java new file mode 100644 index 0000000000..19c1798a93 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java @@ -0,0 +1,12 @@ +package com.baeldung.memento; + +public class Coordinates { + + private int x; + private int y; + + public Coordinates(int x, int y) { + this.x = x; + this.y = y; + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java new file mode 100644 index 0000000000..cf08e2b226 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java @@ -0,0 +1,19 @@ +package com.baeldung.memento; + +public class TextEditor { + + private TextWindow textWindow; + private TextWindowState savedTextWindow; + + public TextEditor(TextWindow textWindow) { + this.textWindow = textWindow; + } + + public void hitSave() { + savedTextWindow = textWindow.save(); + } + + public void hitUndo() { + textWindow.restore(savedTextWindow); + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java new file mode 100644 index 0000000000..5fdfda1998 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java @@ -0,0 +1,30 @@ +package com.baeldung.memento; + +public class TextWindow { + + private StringBuilder currentText; + private Coordinates cursorPosition; + + public TextWindow() { + this.currentText = new StringBuilder(); + this.cursorPosition = new Coordinates(0, 0); + } + + public void addText(String text) { + currentText.append(text); + } + + public TextWindowState save() { + return new TextWindowState(currentText.toString()); + } + + public void restore(TextWindowState save) { + currentText = new StringBuilder(save.getText()); + cursorPosition = atTextEnd(); + } + + private Coordinates atTextEnd() { + String[] lines = currentText.toString().split("\n"); + return new Coordinates(lines[lines.length - 1].length(), lines.length); + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java new file mode 100644 index 0000000000..10015a84d1 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java @@ -0,0 +1,14 @@ +package com.baeldung.memento; + +public class TextWindowState { + + private String text; + + public TextWindowState(String text) { + this.text = text; + } + + public String getText() { + return text; + } +}