From 99e9b0362798eec388d3555e511d72ce6ae000b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=ED=99=98?= <118493627+LeeJuHwan@users.noreply.github.com> Date: Sun, 9 Feb 2025 00:15:44 +0900 Subject: [PATCH 1/2] update: implementation factory class --- src/main/java/coordinate/FigureFactory.java | 26 ++++++++++++++++++- .../java/coordinate/FigureFactoryTest.java | 18 +++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/coordinate/FigureFactory.java b/src/main/java/coordinate/FigureFactory.java index 8657ada..33e42b0 100644 --- a/src/main/java/coordinate/FigureFactory.java +++ b/src/main/java/coordinate/FigureFactory.java @@ -1,9 +1,33 @@ package coordinate; +import java.util.HashMap; import java.util.List; +import java.util.function.Function; + +public class FigureFactory implements FigureCreator{ + static final HashMap, Figure>> figures = new HashMap<>(); + + static { + figures.put(Line.LINE_POINT_SIZE, (Line::new)); + figures.put(Triangle.TRIANGLE_POINT_SIZE, Triangle::new); + figures.put(Rectangle.RECTANGLE_POINT_SIZE, Rectangle::new); + } + + @Override + public Figure create(List points) { + Function, Figure> figure = figures.get(points.size()); + + if (figure == null) { + throw new IllegalArgumentException("유효하지 않은 도형입니다."); + } + + return figure.apply(points); + + } -public class FigureFactory { static Figure getInstance(List points) { + + if (points.size() == Line.LINE_POINT_SIZE) { return new Line(points); } diff --git a/src/test/java/coordinate/FigureFactoryTest.java b/src/test/java/coordinate/FigureFactoryTest.java index 91d1a8f..48a31c1 100644 --- a/src/test/java/coordinate/FigureFactoryTest.java +++ b/src/test/java/coordinate/FigureFactoryTest.java @@ -6,8 +6,10 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class FigureFactoryTest { + @Test public void line() { List points = Arrays.asList( @@ -43,4 +45,20 @@ public void rectangle() { assertThat(figure).isInstanceOfAny(Rectangle.class); assertThat(figure.getName()).isEqualTo("사각형"); } + + @Test + public void unkown() { + List points = Arrays.asList( + Point.of(1, 1), + Point.of(4, 1), + Point.of(1, 4), + Point.of(4, 4), + Point.of(5, 5)); + + assertThatThrownBy(() -> { + new FigureFactory().create(points); + }) + .hasMessage("유효하지 않은 도형입니다.") + .isInstanceOf(IllegalArgumentException.class); + } } From 643125d493b86451550ce06be9f49cbaec8c4462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A3=BC=ED=99=98?= <118493627+LeeJuHwan@users.noreply.github.com> Date: Sun, 9 Feb 2025 00:21:09 +0900 Subject: [PATCH 2/2] test: create method unit test --- .../java/coordinate/FigureFactoryTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/test/java/coordinate/FigureFactoryTest.java b/src/test/java/coordinate/FigureFactoryTest.java index 48a31c1..581b247 100644 --- a/src/test/java/coordinate/FigureFactoryTest.java +++ b/src/test/java/coordinate/FigureFactoryTest.java @@ -46,6 +46,42 @@ public void rectangle() { assertThat(figure.getName()).isEqualTo("사각형"); } + @Test + public void lineCreate() { + List points = Arrays.asList( + Point.of(1, 2), + Point.of(2, 3)); + + Figure figure = new FigureFactory().create(points); + assertThat(figure).isInstanceOfAny(Line.class); + assertThat(figure.getName()).isEqualTo("선"); + } + + @Test + public void triangleCreate() { + List points = Arrays.asList( + Point.of(1, 1), + Point.of(4, 1), + Point.of(1, 4)); + + Figure figure = new FigureFactory().create(points); + assertThat(figure).isInstanceOfAny(Triangle.class); + assertThat(figure.getName()).isEqualTo("삼각형"); + } + + @Test + public void rectangleCreate() { + List points = Arrays.asList( + Point.of(1, 1), + Point.of(4, 1), + Point.of(1, 4), + Point.of(4, 4)); + + Figure figure = new FigureFactory().create(points); + assertThat(figure).isInstanceOfAny(Rectangle.class); + assertThat(figure.getName()).isEqualTo("사각형"); + } + @Test public void unkown() { List points = Arrays.asList(