From 7f0ca2c85f55050bb318059bf36ff6cb79349bb9 Mon Sep 17 00:00:00 2001 From: Vivek Balasubramaniam Date: Fri, 22 Nov 2019 10:47:01 +0530 Subject: [PATCH] BAEL-3091: The Prototype Pattern in Java (further changes based on suggestions) --- .../java/com/baeldung/prototype/PineTree.java | 4 ++- .../com/baeldung/prototype/PlasticTree.java | 6 +++-- .../prototype/TreePrototypeUnitTest.java | 27 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PineTree.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PineTree.java index a8f79bc03e..03f0ebfe7f 100644 --- a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PineTree.java +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PineTree.java @@ -15,7 +15,9 @@ public class PineTree extends Tree { @Override public Tree copy() { - return new PineTree(this.getMass(), this.getHeight()); + PineTree pineTreeClone = new PineTree(this.getMass(), this.getHeight()); + pineTreeClone.setPosition(this.getPosition()); + return pineTreeClone; } } diff --git a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PlasticTree.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PlasticTree.java index 854334c69b..aea805dd47 100644 --- a/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PlasticTree.java +++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/prototype/PlasticTree.java @@ -8,14 +8,16 @@ public class PlasticTree extends Tree { super(mass, height); this.name = "PlasticTree"; } - + public String getName() { return name; } @Override public Tree copy() { - return new PlasticTree(this.getMass(), this.getHeight()); + PlasticTree plasticTreeClone = new PlasticTree(this.getMass(), this.getHeight()); + plasticTreeClone.setPosition(this.getPosition()); + return plasticTreeClone; } } diff --git a/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java index cbb4425749..1fb1fbfea6 100644 --- a/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java +++ b/patterns/design-patterns-creational/src/test/java/com/baeldung/prototype/TreePrototypeUnitTest.java @@ -2,6 +2,10 @@ package com.baeldung.prototype; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Arrays; +import java.util.List; +import static java.util.stream.Collectors.toList; + import org.junit.jupiter.api.Test; public class TreePrototypeUnitTest { @@ -38,4 +42,27 @@ public class TreePrototypeUnitTest { assertEquals(position, pineTree.getPosition()); assertEquals(otherPosition, anotherPineTree.getPosition()); } + + @Test + public void givenA_ListOfTreesWhenClonedThenCreateListOfClones() { + double mass = 10.0; + double height = 3.7; + Position position = new Position(3, 7); + Position otherPosition = new Position(4, 8); + + PlasticTree plasticTree = new PlasticTree(mass, height); + plasticTree.setPosition(position); + PineTree pineTree = new PineTree(mass, height); + pineTree.setPosition(otherPosition); + + List trees = Arrays.asList(plasticTree, pineTree); + + List treeClones = trees.stream().map(Tree::copy).collect(toList()); + + Tree plasticTreeClone = treeClones.get(0); + + assertEquals(mass, plasticTreeClone.getMass()); + assertEquals(height, plasticTreeClone.getHeight()); + assertEquals(position, plasticTreeClone.getPosition()); + } }