Skip to content

Commit 1e1142b

Browse files
Alejandro GervasioKevinGilmore
Alejandro Gervasio
authored andcommitted
The Command Pattern in Java - BAEL-1722 (eugenp#4048)
* Initial Commit * Update pom.xml * Fix unit tests format * Fix unit test class name * Update OpenTextFileOPerationUnitTest.java * Delete OpenTextFileOPerationUnitTest.java * Delete OpenTextFileOPerationUnitTest.java * Add unit test class * Update TextFileOperationExecutorUnitTest.java * Update TextFileUnitTest.java
1 parent fd76b01 commit 1e1142b

File tree

11 files changed

+265
-1
lines changed

11 files changed

+265
-1
lines changed

patterns/behavioral-patterns/pom.xml

+13-1
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,22 @@
1919
<version>4.12</version>
2020
<scope>test</scope>
2121
</dependency>
22+
<dependency>
23+
<groupId>org.hamcrest</groupId>
24+
<artifactId>hamcrest-core</artifactId>
25+
<version>1.3</version>
26+
<scope>test</scope>
27+
</dependency>
28+
<dependency>
29+
<groupId>org.assertj</groupId>
30+
<artifactId>assertj-core</artifactId>
31+
<version>3.8.0</version>
32+
<scope>test</scope>
33+
</dependency>
2234
</dependencies>
2335
<properties>
2436
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2537
<maven.compiler.source>1.8</maven.compiler.source>
2638
<maven.compiler.target>1.8</maven.compiler.target>
27-
</properties>
39+
</properties>
2840
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.baeldung.pattern.command.client;
2+
3+
import com.baeldung.pattern.command.command.OpenTextFileOperation;
4+
import com.baeldung.pattern.command.command.SaveTextFileOperation;
5+
import com.baeldung.pattern.command.command.TextFileOperation;
6+
import com.baeldung.pattern.command.invoker.TextFileOperationExecutor;
7+
import com.baeldung.pattern.command.receiver.TextFile;
8+
9+
public class TextFileApplication {
10+
11+
public static void main(String[] args) {
12+
13+
TextFileOperation openTextFileOperation = new OpenTextFileOperation(new TextFile("file1.txt"));
14+
TextFileOperation saveTextFileOperation = new SaveTextFileOperation(new TextFile("file2.txt"));
15+
TextFileOperationExecutor textFileOperationExecutor = new TextFileOperationExecutor();
16+
System.out.println(textFileOperationExecutor.executeOperation(openTextFileOperation));
17+
System.out.println(textFileOperationExecutor.executeOperation(saveTextFileOperation));
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.pattern.command.command;
2+
3+
import com.baeldung.pattern.command.receiver.TextFile;
4+
5+
public class OpenTextFileOperation implements TextFileOperation {
6+
7+
private final TextFile textFile;
8+
9+
public OpenTextFileOperation(TextFile textFile) {
10+
this.textFile = textFile;
11+
}
12+
13+
@Override
14+
public String execute() {
15+
return textFile.open();
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.pattern.command.command;
2+
3+
import com.baeldung.pattern.command.receiver.TextFile;
4+
5+
public class SaveTextFileOperation implements TextFileOperation {
6+
7+
private final TextFile textFile;
8+
9+
public SaveTextFileOperation(TextFile textFile) {
10+
this.textFile = textFile;
11+
}
12+
13+
@Override
14+
public String execute() {
15+
return textFile.save();
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.baeldung.pattern.command.command;
2+
3+
@FunctionalInterface
4+
public interface TextFileOperation {
5+
6+
String execute();
7+
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.baeldung.pattern.command.invoker;
2+
3+
import com.baeldung.pattern.command.command.TextFileOperation;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class TextFileOperationExecutor {
8+
9+
private final List<TextFileOperation> textFileOperations = new ArrayList<>();
10+
11+
public String executeOperation(TextFileOperation textFileOperation) {
12+
textFileOperations.add(textFileOperation);
13+
return textFileOperation.execute();
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.pattern.command.receiver;
2+
3+
public class TextFile {
4+
5+
private final String name;
6+
7+
public TextFile(String name) {
8+
this.name = name;
9+
}
10+
11+
public String open() {
12+
return "Opening file " + name;
13+
}
14+
15+
public String read() {
16+
return "Reading file " + name;
17+
}
18+
19+
public String write() {
20+
return "Writing to file " + name;
21+
}
22+
23+
public String save() {
24+
return "Saving file " + name;
25+
}
26+
27+
public String copy() {
28+
return "Copying file " + name;
29+
}
30+
31+
public String paste() {
32+
return "Pasting file " + name;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.pattern.command.test;
2+
3+
import com.baeldung.pattern.command.command.OpenTextFileOperation;
4+
import com.baeldung.pattern.command.command.TextFileOperation;
5+
import com.baeldung.pattern.command.receiver.TextFile;
6+
import org.junit.Test;
7+
import static org.assertj.core.api.Assertions.*;
8+
9+
public class OpenTextFileOperationUnitTest {
10+
11+
@Test
12+
public void givenOpenTextFileOperationIntance_whenCalledExecuteMethod_thenOneAssertion() {
13+
TextFileOperation openTextFileOperation = new OpenTextFileOperation(new TextFile("file1.txt"));
14+
assertThat(openTextFileOperation.execute()).isEqualTo("Opening file file1.txt");
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.pattern.command.test;
2+
3+
import com.baeldung.pattern.command.command.SaveTextFileOperation;
4+
import com.baeldung.pattern.command.command.TextFileOperation;
5+
import com.baeldung.pattern.command.receiver.TextFile;
6+
import org.junit.Test;
7+
import static org.assertj.core.api.Assertions.*;
8+
9+
public class SaveTextFileOperationUnitTest {
10+
11+
@Test
12+
public void givenSaveTextFileOperationIntance_whenCalledExecuteMethod_thenOneAssertion() {
13+
TextFileOperation openTextFileOperation = new SaveTextFileOperation(new TextFile("file1.txt"));
14+
assertThat(openTextFileOperation.execute()).isEqualTo("Saving file file1.txt");
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.baeldung.pattern.command.test;
2+
3+
import com.baeldung.pattern.command.command.OpenTextFileOperation;
4+
import com.baeldung.pattern.command.command.SaveTextFileOperation;
5+
import com.baeldung.pattern.command.command.TextFileOperation;
6+
import com.baeldung.pattern.command.invoker.TextFileOperationExecutor;
7+
import com.baeldung.pattern.command.receiver.TextFile;
8+
import java.util.function.Function;
9+
import org.junit.Test;
10+
import static org.assertj.core.api.Assertions.*;
11+
import org.junit.BeforeClass;
12+
13+
public class TextFileOperationExecutorUnitTest {
14+
15+
private static TextFileOperationExecutor textFileOperationExecutor;
16+
17+
18+
@BeforeClass
19+
public static void setUpTextFileOperationExecutor() {
20+
textFileOperationExecutor = new TextFileOperationExecutor();
21+
}
22+
23+
@Test
24+
public void givenTextFileOPerationExecutorInstance_whenCalledexecuteOperationWithOpenTextOperation_thenOneAssertion() {
25+
TextFileOperation textFileOperation = new OpenTextFileOperation(new TextFile("file1.txt"));
26+
assertThat(textFileOperationExecutor.executeOperation(textFileOperation)).isEqualTo("Opening file file1.txt");
27+
}
28+
29+
@Test
30+
public void givenTextFileOPerationExecutorInstance_whenCalledexecuteOperationWithSaveTextOperation_thenOneAssertion() {
31+
TextFileOperation textFileOperation = new SaveTextFileOperation(new TextFile("file1.txt"));
32+
assertThat(textFileOperationExecutor.executeOperation(textFileOperation)).isEqualTo("Saving file file1.txt");
33+
}
34+
35+
@Test
36+
public void givenTextFileOperationExecutorInstance_whenCalledexecuteOperationWithTextFileOpenLambda_thenOneAssertion() {
37+
assertThat(textFileOperationExecutor.executeOperation(() -> {return "Opening file file1.txt";})).isEqualTo("Opening file file1.txt");
38+
}
39+
40+
@Test
41+
public void givenTextFileOperationExecutorInstance_whenCalledexecuteOperationWithTextFileSaveLambda_thenOneAssertion() {
42+
assertThat(textFileOperationExecutor.executeOperation(() -> {return "Saving file file1.txt";})).isEqualTo("Saving file file1.txt");
43+
}
44+
45+
@Test
46+
public void givenTextFileOperationExecutorInstance_whenCalledexecuteOperationWithTextFileOpenMethodReferenceOfExistingObject_thenOneAssertion() {
47+
TextFile textFile = new TextFile("file1.txt");
48+
assertThat(textFileOperationExecutor.executeOperation(textFile::open)).isEqualTo("Opening file file1.txt");
49+
}
50+
51+
@Test
52+
public void givenTextFileOperationExecutorInstance_whenCalledexecuteOperationWithTextFileSaveMethodReferenceOfExistingObject_thenOneAssertion() {
53+
TextFile textFile = new TextFile("file1.txt");
54+
assertThat(textFileOperationExecutor.executeOperation(textFile::save)).isEqualTo("Saving file file1.txt");
55+
}
56+
57+
@Test
58+
public void givenOpenTextFileOperationExecuteMethodReference_whenCalledApplyMethod_thenOneAssertion() {
59+
Function<OpenTextFileOperation, String> executeMethodReference = OpenTextFileOperation::execute;
60+
assertThat(executeMethodReference.apply(new OpenTextFileOperation(new TextFile("file1.txt")))).isEqualTo("Opening file file1.txt");
61+
}
62+
63+
@Test
64+
public void givenSaveTextFileOperationExecuteMethodReference_whenCalledApplyMethod_thenOneAssertion() {
65+
Function<SaveTextFileOperation, String> executeMethodReference = SaveTextFileOperation::execute;
66+
assertThat(executeMethodReference.apply(new SaveTextFileOperation(new TextFile("file1.txt")))).isEqualTo("Saving file file1.txt");
67+
}
68+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.baeldung.pattern.command.test;
2+
3+
import com.baeldung.pattern.command.receiver.TextFile;
4+
import org.junit.Test;
5+
import static org.assertj.core.api.Assertions.*;
6+
import org.junit.BeforeClass;
7+
8+
public class TextFileUnitTest {
9+
10+
private static TextFile textFile;
11+
12+
13+
@BeforeClass
14+
public static void setUpTextFileInstance() {
15+
textFile = new TextFile("file1.txt");
16+
}
17+
18+
@Test
19+
public void givenTextFileInstance_whenCalledopenMethod_thenOneAssertion() {
20+
assertThat(textFile.open()).isEqualTo("Opening file file1.txt");
21+
}
22+
23+
@Test
24+
public void givenTextFileInstance_whenCalledwriteMethod_thenOneAssertion() {
25+
assertThat(textFile.write()).isEqualTo("Writing to file file1.txt");
26+
}
27+
28+
@Test
29+
public void givenTextFileInstance_whenCalledsaveMethod_thenOneAssertion() {
30+
assertThat(textFile.save()).isEqualTo("Saving file file1.txt");
31+
}
32+
33+
@Test
34+
public void givenTextFileInstance_whenCalledcopyMethod_thenOneAssertion() {
35+
assertThat(textFile.copy()).isEqualTo("Copying file file1.txt");
36+
}
37+
38+
@Test
39+
public void givenTextFileInstance_whenCalledpasteMethod_thenOneAssertion() {
40+
assertThat(textFile.paste()).isEqualTo("Pasting file file1.txt");
41+
}
42+
}

0 commit comments

Comments
 (0)