[Design pattern] Factory method ๐ฒ, (Creational patterns)
Factory method
์ธํฐํ์ด์ค๋ก ๊ฐ์ฒด๋ค์ ์ ์ํ๊ณ , ํฉํ ๋ฆฌ๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑ
์ฅ์
-
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌ์ํด์ผ๋ก ํด๋ผ์ด์ธํธ ์ฝ๋์ ๊ฒฐํฉ๋(์์กด์ฑ)๋ฅผ ๐
๐ ์ฝ๋ ๋ณ๊ฒฝ ์, ๊ฐ์ฒด ์์ฑ ํด๋์ค๋ง ์์ ๊ฐ๋ฅ -
์ธํฐํ์ด์ค๋ฅผ ๋ฐํ์ผ๋ก ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋ ๊ตฌํ ๊ฐ๋ฅ
-
๊ฐ์ฒด์ ์๋ฃํ์ด ํ์ ํด๋์ค์ ์ํด ๊ฒฐ์
๐ ํ์ฅ ์ฉ์ด -
SOLID ์์น ์ค DIP(Dependency Inversion Principle, ์์กด ๊ด๊ณ ์ญ์ ์์น) ์ฑ๋ฆฝ
๋จ์
- ์์ฑํ ๊ฐ์ฒด์ ์ข ๋ฅ๊ฐ ๋ง์์ง์๋ก, ํด๋์ค ๋ํ ๐
๊ตฌ์กฐ
Code
public class FactoryPatternEx {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
Shape shape2 = shapeFactory.getShape("RECTANGLE");
shape2.draw();
}
}
๐ Factory์์ ๋ง๋ค์ด๋ผ ์ํ๋ค์ ์ ์
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
๐ ์ํ๋ค์ ๋ง๋ค์ด ๋ด๋ณด๋ผ ํฉํ ๋ฆฌ ์ ์
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (ShapeType.equalsIgnoreCase("CIRCLE"))
return new Circle();
else if (ShapeType.equalsIgnoreCase("RECTANGLE"))
return new Rectangle();
else
return null
}
}
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([Design pattern] Factory method ๐ฒ, (Creational patterns)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@daydream/Design-pattern-Factory-method์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค