From 43d47225be70d7b10aada93efdf7e26c84421366 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Wed, 15 May 2019 17:17:37 +0530 Subject: [PATCH 1/7] Added Factory Design pattern implementation in Java and its test --- .../factorypattern/Pentagon.java | 13 ++++++ .../factorypattern/Polygon.java | 20 +++++++++ .../factorypattern/PolygonFactory.java | 32 +++++++++++++ .../designpatterns/factorypattern/Square.java | 14 ++++++ .../factorypattern/Triangle.java | 13 ++++++ .../factorypattern/PolygonFactoryTest.java | 45 +++++++++++++++++++ 6 files changed, 137 insertions(+) create mode 100644 src/main/java/com/designpatterns/factorypattern/Pentagon.java create mode 100644 src/main/java/com/designpatterns/factorypattern/Polygon.java create mode 100644 src/main/java/com/designpatterns/factorypattern/PolygonFactory.java create mode 100644 src/main/java/com/designpatterns/factorypattern/Square.java create mode 100644 src/main/java/com/designpatterns/factorypattern/Triangle.java create mode 100644 src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java diff --git a/src/main/java/com/designpatterns/factorypattern/Pentagon.java b/src/main/java/com/designpatterns/factorypattern/Pentagon.java new file mode 100644 index 000000000000..a7ad7c3dd9b2 --- /dev/null +++ b/src/main/java/com/designpatterns/factorypattern/Pentagon.java @@ -0,0 +1,13 @@ +package src.main.java.com.designpatterns.factorypattern; + +public class Pentagon implements Polygon { + @Override + public String getType() { + return "Pentagon"; + } + + @Override + public double area(double side) { + return 3.847104 * side * side; + } +} diff --git a/src/main/java/com/designpatterns/factorypattern/Polygon.java b/src/main/java/com/designpatterns/factorypattern/Polygon.java new file mode 100644 index 000000000000..415d6734679f --- /dev/null +++ b/src/main/java/com/designpatterns/factorypattern/Polygon.java @@ -0,0 +1,20 @@ +package src.main.java.com.designpatterns.factorypattern; + +public interface Polygon { + /** + * Should be overriden to describe the type of each polygon + * + * @return a String value describing the name of the polygon + */ + String getType(); + + /** + * Calculates the area of the regular polygon + * + * @param side The length of the side of regular polygon + * @return area of the polygon + */ + double area(double side); +} + + diff --git a/src/main/java/com/designpatterns/factorypattern/PolygonFactory.java b/src/main/java/com/designpatterns/factorypattern/PolygonFactory.java new file mode 100644 index 000000000000..08dc9e4277bd --- /dev/null +++ b/src/main/java/com/designpatterns/factorypattern/PolygonFactory.java @@ -0,0 +1,32 @@ +package src.main.java.com.designpatterns.factorypattern; + +/** + * In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal + * with the problem of creating objects without having to specify the exact class of the object that will be created. + * This is done by creating objects by calling a factory method—either specified in an interface and implemented by + * child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling + * a constructor. + * + * @see Factory Pattern + */ +public class PolygonFactory { + /** + * Factory pattern implementation for the Polygon Interface to return the correct regular polygon object + * depending on the number of sides it has. + * + * @param numberOfSides in the polygon to initialize. + * @return the object having the respective number of sides + */ + public Polygon getPolygon(int numberOfSides) { + switch (numberOfSides) { + case 3: + return new Triangle(); + case 4: + return new Square(); + case 5: + return new Pentagon(); + default: + return null; + } + } +} diff --git a/src/main/java/com/designpatterns/factorypattern/Square.java b/src/main/java/com/designpatterns/factorypattern/Square.java new file mode 100644 index 000000000000..30f9d2341554 --- /dev/null +++ b/src/main/java/com/designpatterns/factorypattern/Square.java @@ -0,0 +1,14 @@ +package src.main.java.com.designpatterns.factorypattern; + +public class Square implements Polygon { + + @Override + public String getType() { + return "Square"; + } + + @Override + public double area(double side) { + return side * side; + } +} diff --git a/src/main/java/com/designpatterns/factorypattern/Triangle.java b/src/main/java/com/designpatterns/factorypattern/Triangle.java new file mode 100644 index 000000000000..69beb14e535c --- /dev/null +++ b/src/main/java/com/designpatterns/factorypattern/Triangle.java @@ -0,0 +1,13 @@ +package src.main.java.com.designpatterns.factorypattern; + +public class Triangle implements Polygon { + @Override + public String getType() { + return "Triangle"; + } + + @Override + public double area(double side) { + return 0.433013 * side * side; + } +} diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java new file mode 100644 index 000000000000..7d76a82c3272 --- /dev/null +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -0,0 +1,45 @@ +package src.test.java.com.designpatterns.factorypattern; + +import org.junit.Assert; +import org.junit.Test; +import src.main.java.com.designpatterns.factorypattern.Polygon; +import src.main.java.com.designpatterns.factorypattern.PolygonFactory; + +public class PolygonFactoryTest { + @Test + public void testPolygonFactory() { + String failReason = ""; + PolygonFactory polFactory = new PolygonFactory(); + + //Test for triangle + Polygon triangle = polFactory.getPolygon(3); + if (!triangle.getType().equals("Triangle")) { + failReason += "Polygon Factory failed for Triangle."; + } + if (triangle.area(4) != 6.928208) { + failReason += "Triangle area is incorrect!"; + } + + + //Test for square + Polygon square = polFactory.getPolygon(4); + if (!square.getType().equals("Square")) { + failReason += "Polygon Factory failed for Square."; + } + if (square.area(5) != 25) { + failReason += "Square area is incorrect!"; + } + + + //Test for pentagon + Polygon pentagon = polFactory.getPolygon(5); + if (!pentagon.getType().equals("Pentagon")) { + failReason += "Polygon Factory failed for Pentagon."; + } + if (pentagon.area(9) != 311.615424) { + failReason += "Pentagon area is incorrect!"; + } + + Assert.assertEquals(failReason, failReason, ""); + } +} From c29640e0e2e081def7dec714846b8acbb1074d05 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:04:41 +0530 Subject: [PATCH 2/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index 7d76a82c3272..25a43ed80e1a 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -11,7 +11,7 @@ public void testPolygonFactory() { String failReason = ""; PolygonFactory polFactory = new PolygonFactory(); - //Test for triangle + // Test for triangle Polygon triangle = polFactory.getPolygon(3); if (!triangle.getType().equals("Triangle")) { failReason += "Polygon Factory failed for Triangle."; From c11a0611a07ca00d8e6ff3e97a1494feeb80d04d Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:04:56 +0530 Subject: [PATCH 3/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index 25a43ed80e1a..bcc0e3a1a135 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -21,7 +21,7 @@ public void testPolygonFactory() { } - //Test for square + // Test for square Polygon square = polFactory.getPolygon(4); if (!square.getType().equals("Square")) { failReason += "Polygon Factory failed for Square."; From 77881f67fd8a935e6ac0942d53815f709cd10c87 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:05:06 +0530 Subject: [PATCH 4/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index bcc0e3a1a135..bd54800c59ed 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -13,7 +13,7 @@ public void testPolygonFactory() { // Test for triangle Polygon triangle = polFactory.getPolygon(3); - if (!triangle.getType().equals("Triangle")) { + if (!"Triangle".equals(triangle.getType())) { failReason += "Polygon Factory failed for Triangle."; } if (triangle.area(4) != 6.928208) { From 6ffb2d5b4ee7ea554d3c11cea9a0d032860fb7cd Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:05:13 +0530 Subject: [PATCH 5/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index bd54800c59ed..318f2d925dd0 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -33,7 +33,7 @@ public void testPolygonFactory() { //Test for pentagon Polygon pentagon = polFactory.getPolygon(5); - if (!pentagon.getType().equals("Pentagon")) { + if (!"Pentagon".equals(pentagon.getType())) { failReason += "Polygon Factory failed for Pentagon."; } if (pentagon.area(9) != 311.615424) { From 321ebea864f98a4405590a1965b2426c5f12221b Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:05:42 +0530 Subject: [PATCH 6/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index 318f2d925dd0..1cb92d4acc3c 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -31,7 +31,7 @@ public void testPolygonFactory() { } - //Test for pentagon + // Test for pentagon Polygon pentagon = polFactory.getPolygon(5); if (!"Pentagon".equals(pentagon.getType())) { failReason += "Polygon Factory failed for Pentagon."; From 616d5cfcc81aa0b97f713cbd1dd38d1866eaf7fb Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 16 May 2019 13:05:49 +0530 Subject: [PATCH 7/7] Update src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java Co-Authored-By: Libin Yang --- .../com/designpatterns/factorypattern/PolygonFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java index 1cb92d4acc3c..c175911b6872 100644 --- a/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java +++ b/src/test/java/com/designpatterns/factorypattern/PolygonFactoryTest.java @@ -23,7 +23,7 @@ public void testPolygonFactory() { // Test for square Polygon square = polFactory.getPolygon(4); - if (!square.getType().equals("Square")) { + if (!"Square".equals(square.getType())) { failReason += "Polygon Factory failed for Square."; } if (square.area(5) != 25) {