팩토리 패턴이란?
팩토리 패턴은 생성 패턴 중 하나
객체 생성을 캡슐화함
두 가지 종류가 있는데 팩토리 메소드 패턴, 추상 팩토리 패턴이다
두 종류를 알아보기 전에 심플 팩토리 패턴이란?
- 위 언급된 두 종류의 베이스
- 객체를 생성하는 클래스를 따로 빼 놓음
public class CutletFactory {
Cutlet orderCutlet(String type) {
Cutlet cutlet = null;
if (type.equals("cheese")) {
cutlet = new CheeseCutlet();
} else if (type.equals("sweetPotato")) {
cutlet = new SweetPotatoCutlet();
}
return cutlet;
}
}
public class CheeseCutlet extends Cutlet {
public CheeseCutlet() {
System.out.println("치즈돈까스");
}
}
public class SweetPotatoCutlet extends Cutlet {
public CheeseCutlet() {
System.out.println("고구마돈까스");
}
}
public class Test {
public static void main(String[] args){
CutletFactory factory = new CutletFactory();
Cutlet cutlet = factory.orderPhone("cheese");
}
}
심플 팩토리 패턴을 팩토리 메소드 패턴이라 착각하고 있었고 확실히 알게 되는 순간이었다
팩토리 메소드 패턴
- 어떤 객체를 만들지 서브 클래스에서 결정
- 다시 말하면 객체를 만드는 일을 서브 클래스로 위임하는 것
public class Test {
public static void main(String[] args) {
CutletMethodFactory wugaFactory = new WugaCutletMethodFactory();
Cutlet wugaCutlet = wugaFactory.createCutlet();
CutletMethodFactory jinFactory = new JinCutletMethodFactory();
Cutlet jinCutlet = jinFactory.createCutlet();
}
}
public interface CutletMethodFactory {
default Cutlet orderCutlet() {
return createCutlet();
}
Cutlet createCutlet();
}
public class WugaCutletMethodFactory implements CutletMethodFactory {
@Override
public Cutlet createCutlet() {
System.out.println("정욱공장");
return new Cutlet();
}
}
public class JinCutletMethodFactory implements CutletMethodFactory {
@Override
public Cutlet createCutlet() {
System.out.println("나라공장");
return new Cutlet();
}
}
추상 팩토리 패턴
- 구상 클래스에 의존하지 않고 서로 연관되어 있거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스 제공
- 구상 클래스는 서브 클래스에서 만듦
- 보통 팩토리 메소드를 포함하여 구현하는 경우가 많다고 함
나는 팩토리 안에 팩토리를 생각했다
- 묶을 수 있는 제품군들이 있을 때, 쉽게 대체할 수 있다는 장점이 있다
- 새로운 클래스가 생겼을 때엔 팩토리의 서브 클래스에서 수정을 해야함
'dev > 🧩 디자인패턴' 카테고리의 다른 글
퍼사드 패턴이란? (Facade Pattern) (0) | 2022.11.24 |
---|---|
어댑터 패턴이란? (Adapter Pattern) (0) | 2022.11.15 |
싱글턴 패턴 - 동시성 문제 해결 (0) | 2022.10.25 |
싱글턴 패턴이란? (Singleton Pattern) (0) | 2022.10.25 |
전략 패턴이란? (Strategy Pattern) (2) | 2022.10.07 |