diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/Animal.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Animal.java new file mode 100644 index 000000000..ead884fcd --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Animal.java @@ -0,0 +1,5 @@ +package factoryMethodPattern; + +public abstract class Animal { + abstract AnimalToy getToy(); +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/AnimalToy.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/AnimalToy.java new file mode 100644 index 000000000..95024a485 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/AnimalToy.java @@ -0,0 +1,5 @@ +package factoryMethodPattern; + +public abstract class AnimalToy { + abstract void identify(); +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/Cat.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Cat.java new file mode 100644 index 000000000..aecaac50e --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Cat.java @@ -0,0 +1,9 @@ +package factoryMethodPattern; + +public class Cat extends Animal { + + @Override + AnimalToy getToy() { + return new CatToy(); + } +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/CatToy.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/CatToy.java new file mode 100644 index 000000000..6c5c2f1c2 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/CatToy.java @@ -0,0 +1,8 @@ +package factoryMethodPattern; + +public class CatToy extends AnimalToy { + @Override + void identify() { + System.out.println("나는 고양이 장남감이야"); + } +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/Dog.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Dog.java new file mode 100644 index 000000000..facf44e37 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/Dog.java @@ -0,0 +1,9 @@ +package factoryMethodPattern; + +public class Dog extends Animal { + + @Override + AnimalToy getToy() { + return new DogToy(); + } +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/DogToy.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/DogToy.java new file mode 100644 index 000000000..cf82d307b --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/DogToy.java @@ -0,0 +1,9 @@ +package factoryMethodPattern; + +public class DogToy extends AnimalToy { + + @Override + void identify() { + System.out.println("나는 강아지 장난감이야"); + } +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/FactoryMethodMain.java b/oop-in-spring/practice/design-pattern/factoryMethodPattern/FactoryMethodMain.java new file mode 100644 index 000000000..4d0c9bcb0 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/FactoryMethodMain.java @@ -0,0 +1,17 @@ +package factoryMethodPattern; + +public class FactoryMethodMain { + public static void main(String[] args) { + // 팩터리 메서드를 보유한 객체들 생성 + Animal bolt = new Dog(); + Animal kitty = new Cat(); + + // 팩터리 메서드가 반환하는 객체들 + AnimalToy boltBall = bolt.getToy(); + AnimalToy kittyTower = kitty.getToy(); + + // 팩터리 메서드가 반환한 객체들을 사용 + boltBall.identify(); + kittyTower.identify(); + } +} diff --git a/oop-in-spring/practice/design-pattern/factoryMethodPattern/README.md b/oop-in-spring/practice/design-pattern/factoryMethodPattern/README.md new file mode 100644 index 000000000..e40cf3016 --- /dev/null +++ b/oop-in-spring/practice/design-pattern/factoryMethodPattern/README.md @@ -0,0 +1,7 @@ +# 팩토리 메서드 패턴 +- 객체를 생성할 때 어떤 클래스의 인스턴스를 만들지를 서브 클래스에서 결정하게 함으로써, 새로운 구현 클래스가 추가되어도 기존 Factory 코드의 수정 없이 새로운 Factory 를 추가할 수 있게 해준다. +- + + +# Reference +- https://dev-youngjun.tistory.com/195 \ No newline at end of file