diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml
index dbcd4f1b1d..5f9152ad42 100644
--- a/enterprise-patterns/front-controller-pattern/pom.xml
+++ b/enterprise-patterns/front-controller-pattern/pom.xml
@@ -17,7 +17,7 @@
javax.servlet
javax.servlet-api
- 3.1.0
+ 4.0.0-b01
provided
diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java
index 4d9e5f7b79..0c5bd64bbc 100644
--- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java
+++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java
@@ -1,7 +1,7 @@
package com.baeldung.enterprise.patterns.front.controller.commands;
import com.baeldung.enterprise.patterns.front.controller.data.Book;
-import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf;
+import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl;
import javax.servlet.ServletException;
import java.io.IOException;
@@ -9,13 +9,12 @@ import java.io.IOException;
public class SearchCommand extends FrontCommand {
@Override
public void process() throws ServletException, IOException {
- Book book = Bookshelf.getInstance()
+ Book book = new BookshelfImpl().getInstance()
.findByTitle(request.getParameter("title"));
if (book != null) {
request.setAttribute("book", book);
forward("book-found");
} else {
- request.setAttribute("books", Bookshelf.getInstance().getBooks());
forward("book-notfound");
}
}
diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java
index 634e05c3a0..abadcc0d76 100644
--- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java
+++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java
@@ -1,40 +1,15 @@
package com.baeldung.enterprise.patterns.front.controller.data;
-public class Book {
- private String author;
- private String title;
- private Double price;
+public interface Book {
+ String getAuthor();
- public Book() {
- }
+ void setAuthor(String author);
- public Book(String author, String title, Double price) {
- this.author = author;
- this.title = title;
- this.price = price;
- }
+ String getTitle();
- public String getAuthor() {
- return author;
- }
+ void setTitle(String title);
- public void setAuthor(String author) {
- this.author = author;
- }
+ Double getPrice();
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public Double getPrice() {
- return price;
- }
-
- public void setPrice(Double price) {
- this.price = price;
- }
+ void setPrice(Double price);
}
diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java
new file mode 100644
index 0000000000..b270bc7985
--- /dev/null
+++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java
@@ -0,0 +1,46 @@
+package com.baeldung.enterprise.patterns.front.controller.data;
+
+public class BookImpl implements Book {
+ private String author;
+ private String title;
+ private Double price;
+
+ public BookImpl() {
+ }
+
+ public BookImpl(String author, String title, Double price) {
+ this.author = author;
+ this.title = title;
+ this.price = price;
+ }
+
+ @Override
+ public String getAuthor() {
+ return author;
+ }
+
+ @Override
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ @Override
+ public String getTitle() {
+ return title;
+ }
+
+ @Override
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public Double getPrice() {
+ return price;
+ }
+
+ @Override
+ public void setPrice(Double price) {
+ this.price = price;
+ }
+}
diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java
index ad9758bf76..1e30452d95 100644
--- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java
+++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java
@@ -1,32 +1,15 @@
package com.baeldung.enterprise.patterns.front.controller.data;
-import java.util.ArrayList;
-import java.util.List;
+public interface Bookshelf {
-public class Bookshelf {
- private static Bookshelf INSTANCE = new Bookshelf();
- private List books = new ArrayList<>();
-
- public static Bookshelf getInstance() {
- if (INSTANCE.books.size() == 0) {
- INSTANCE.init();
- }
- return INSTANCE;
+ default void init() {
+ add(new BookImpl("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99));
+ add(new BookImpl("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88));
}
- private void init() {
- books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99));
- books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88));
- }
+ Bookshelf getInstance();
- public Book findByTitle(String title) {
- return books.stream()
- .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase()))
- .findFirst()
- .orElse(null);
- }
+ boolean add(E book);
- public List getBooks() {
- return books;
- }
+ Book findByTitle(String title);
}
diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java
new file mode 100644
index 0000000000..3862418857
--- /dev/null
+++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java
@@ -0,0 +1,24 @@
+package com.baeldung.enterprise.patterns.front.controller.data;
+
+import java.util.ArrayList;
+
+public class BookshelfImpl extends ArrayList implements Bookshelf {
+ private static Bookshelf INSTANCE;
+
+ @Override
+ public Bookshelf getInstance() {
+ if (INSTANCE == null) {
+ INSTANCE = new BookshelfImpl();
+ INSTANCE.init();
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public Book findByTitle(String title) {
+ return this.stream()
+ .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase()))
+ .findFirst()
+ .orElse(null);
+ }
+}