From 7b687a2aced2be6563236a7c8ca81c23b88606e6 Mon Sep 17 00:00:00 2001 From: mperor Date: Sat, 8 Feb 2025 15:28:43 +0100 Subject: [PATCH] Add interpreter design pattern with test case --- DesignPatterns/README.md | 1 + .../interpreter/CommandInterpreter.java | 7 ++++++ .../interpreter/CommandInterpreterTest.java | 24 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreter.java create mode 100644 DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreterTest.java diff --git a/DesignPatterns/README.md b/DesignPatterns/README.md index 54decea..fd6d32e 100644 --- a/DesignPatterns/README.md +++ b/DesignPatterns/README.md @@ -12,6 +12,7 @@ with practical examples and best practices for using design patterns to create r - [Chain of Responsibility](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) πŸ”— - [Command](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/command) πŸ“ - [Execute Around Method (EAM)](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/eam) β­• +- [Interpreter](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter) πŸ“° - [Mediator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) πŸ—£οΈ - [Memento](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/memento) πŸ’Ύ - [Observer](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/observer) πŸ‘€ diff --git a/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreter.java b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreter.java new file mode 100644 index 0000000..f7853cc --- /dev/null +++ b/DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreter.java @@ -0,0 +1,7 @@ +package pl.mperor.lab.java.design.pattern.behavioral.interpreter; + +@FunctionalInterface +interface CommandInterpreter { + + String interpret(String source); +} diff --git a/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreterTest.java b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreterTest.java new file mode 100644 index 0000000..a2a43a7 --- /dev/null +++ b/DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter/CommandInterpreterTest.java @@ -0,0 +1,24 @@ +package pl.mperor.lab.java.design.pattern.behavioral.interpreter; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +public class CommandInterpreterTest { + + @Test + public void testCommandInterpreter() { + Map commands = new HashMap<>(); + commands.put("/welcome", name -> "πŸ‘‹ Welcome " + name + "!"); + commands.put("/shout", message -> "❗" + message.toUpperCase()); + + Assertions.assertEquals("πŸ‘‹ Welcome Alice πŸ‘±β€β™€οΈ!", + commands.get("/welcome").interpret("Alice πŸ‘±β€β™€οΈ") + ); + Assertions.assertEquals("❗ARE U READY?", + commands.get("/shout").interpret("Are u ready?") + ); + } +} \ No newline at end of file