From 89e6692ba8189eddea20b1f34a98fc0425576428 Mon Sep 17 00:00:00 2001 From: Ilkka Seppala Date: Fri, 24 Apr 2015 22:01:08 +0300 Subject: [PATCH] Null object as a singleton #50 --- null-object/etc/test.png | Bin 16737 -> 14914 bytes null-object/etc/test.ucls | 128 ++++++++++-------- .../src/main/java/com/iluwatar/App.java | 12 +- .../src/main/java/com/iluwatar/NullNode.java | 77 ++++++----- 4 files changed, 118 insertions(+), 99 deletions(-) diff --git a/null-object/etc/test.png b/null-object/etc/test.png index a29c0a617b22c7cd8b815e9fee764a2b30e71eef..bb08b064613eb75462072de1062f4341ea0fc009 100644 GIT binary patch literal 14914 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 diff --git a/null-object/etc/test.ucls b/null-object/etc/test.ucls index 569663338..79fbc6e92 100644 --- a/null-object/etc/test.ucls +++ b/null-object/etc/test.ucls @@ -1,61 +1,69 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/null-object/src/main/java/com/iluwatar/App.java b/null-object/src/main/java/com/iluwatar/App.java index 4bba5af29..f6bef29a0 100644 --- a/null-object/src/main/java/com/iluwatar/App.java +++ b/null-object/src/main/java/com/iluwatar/App.java @@ -18,14 +18,14 @@ public class App Node root = new NodeImpl("1", new NodeImpl("11", new NodeImpl("111", - new NullNode(), - new NullNode()), - new NullNode()), + NullNode.getInstance(), + NullNode.getInstance()), + NullNode.getInstance()), new NodeImpl("12", - new NullNode(), + NullNode.getInstance(), new NodeImpl("122", - new NullNode(), - new NullNode()))); + NullNode.getInstance(), + NullNode.getInstance()))); root.walk(); } diff --git a/null-object/src/main/java/com/iluwatar/NullNode.java b/null-object/src/main/java/com/iluwatar/NullNode.java index 5f0b440be..b63f561b4 100644 --- a/null-object/src/main/java/com/iluwatar/NullNode.java +++ b/null-object/src/main/java/com/iluwatar/NullNode.java @@ -1,33 +1,44 @@ -package com.iluwatar; - -/** - * - * Null Object implementation for binary tree node. - * - */ -public class NullNode implements Node { - - @Override - public int getTreeSize() { - return 0; - } - - @Override - public Node getLeft() { - return null; - } - - @Override - public Node getRight() { - return null; - } - - @Override - public String getName() { - return null; - } - - @Override - public void walk() { - } -} +package com.iluwatar; + +/** + * + * Null Object implementation for binary tree node. + * + * Implemented as Singleton, since all the NullNodes are the same. + * + */ +public class NullNode implements Node { + + private static NullNode instance = new NullNode(); + + private NullNode() { + } + + public static NullNode getInstance() { + return instance; + } + + @Override + public int getTreeSize() { + return 0; + } + + @Override + public Node getLeft() { + return null; + } + + @Override + public Node getRight() { + return null; + } + + @Override + public String getName() { + return null; + } + + @Override + public void walk() { + } +}