From 3deeefe9107d1ff8936057b3dd35dc3a1a7d966b Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Sat, 2 Mar 2019 19:58:07 +0100 Subject: [PATCH 1/2] BAEL-2755 - Introduction to the Null Object Pattern --- .../com/baeldung/nullobject/JmsRouter.java | 10 +++++++ .../java/com/baeldung/nullobject/Message.java | 24 +++++++++++++++ .../com/baeldung/nullobject/NullRouter.java | 10 +++++++ .../java/com/baeldung/nullobject/Router.java | 7 +++++ .../baeldung/nullobject/RouterFactory.java | 23 ++++++++++++++ .../baeldung/nullobject/RoutingHandler.java | 30 +++++++++++++++++++ .../com/baeldung/nullobject/SmsRouter.java | 10 +++++++ 7 files changed, 114 insertions(+) create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/JmsRouter.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/Message.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/Router.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/RouterFactory.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/RoutingHandler.java create mode 100644 patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/JmsRouter.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/JmsRouter.java new file mode 100644 index 0000000000..7d8215fead --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/JmsRouter.java @@ -0,0 +1,10 @@ +package com.baeldung.nullobject; + +public class JmsRouter implements Router { + + @Override + public void route(Message msg) { + System.out.println("Routing to a JMS queue. Msg: " + msg); + } + +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Message.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Message.java new file mode 100644 index 0000000000..9086b6d92d --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Message.java @@ -0,0 +1,24 @@ +package com.baeldung.nullobject; + +public class Message { + + private String body; + + private String priority; + + public Message(String body, String priority) { + this.body = body; + this.priority = priority; + } + + public String getPriority() { + return priority; + } + + @Override + public String toString() { + return "{body='" + body + '\'' + + ", priority='" + priority + '\'' + + '}'; + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java new file mode 100644 index 0000000000..7da3856c93 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java @@ -0,0 +1,10 @@ +package com.baeldung.nullobject; + +public class NullRouter implements Router { + + @Override + public void route(Message msg) { + // routing to /dev/null + } + +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Router.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Router.java new file mode 100644 index 0000000000..3e67de9558 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/Router.java @@ -0,0 +1,7 @@ +package com.baeldung.nullobject; + +public interface Router { + + void route(Message msg); + +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RouterFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RouterFactory.java new file mode 100644 index 0000000000..ba80834865 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RouterFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.nullobject; + +public class RouterFactory { + + public static Router getRouterForMessage(Message msg) { + + if (msg.getPriority() == null) { + return new NullRouter(); + } + + switch (msg.getPriority()) { + case "high": + return new SmsRouter(); + + case "medium": + return new JmsRouter(); + + default: + return new NullRouter(); + } + + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RoutingHandler.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RoutingHandler.java new file mode 100644 index 0000000000..282b066085 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/RoutingHandler.java @@ -0,0 +1,30 @@ +package com.baeldung.nullobject; + +import java.util.Arrays; +import java.util.List; + +public class RoutingHandler { + + public void handle(Iterable messages){ + for (Message msg : messages) { + Router router = RouterFactory.getRouterForMessage(msg); + router.route(msg); + } + } + + public static void main(String[] args) { + Message highPriorityMsg = new Message("Alert!", "high"); + Message mediumPriorityMsg = new Message("Warning!", "medium"); + Message lowPriorityMsg = new Message("Take a look!", "low"); + Message nullPriorityMsg = new Message("Take a look!", null); + + List messages = Arrays.asList(highPriorityMsg, + mediumPriorityMsg, + lowPriorityMsg, + nullPriorityMsg); + + RoutingHandler routingHandler = new RoutingHandler(); + routingHandler.handle(messages); + + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java new file mode 100644 index 0000000000..3d4a684f94 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java @@ -0,0 +1,10 @@ +package com.baeldung.nullobject; + +public class SmsRouter implements Router { + + @Override + public void route(Message msg) { + System.out.println("Routing to a SMS gate. Msg: " + msg); + } + +} From 23e3e6c7088077b030c6a6cdad40c9dc39699b31 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Sun, 3 Mar 2019 10:33:31 +0100 Subject: [PATCH 2/2] BAEL-2755 - minor improvements --- .../src/main/java/com/baeldung/nullobject/NullRouter.java | 2 +- .../src/main/java/com/baeldung/nullobject/SmsRouter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java index 7da3856c93..a0065a321d 100644 --- a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/NullRouter.java @@ -4,7 +4,7 @@ public class NullRouter implements Router { @Override public void route(Message msg) { - // routing to /dev/null + // do nothing } } diff --git a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java index 3d4a684f94..3e8e2f15f3 100644 --- a/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/nullobject/SmsRouter.java @@ -4,7 +4,7 @@ public class SmsRouter implements Router { @Override public void route(Message msg) { - System.out.println("Routing to a SMS gate. Msg: " + msg); + System.out.println("Routing to a SMS gateway. Msg: " + msg); } }