일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Android Universal Image Loader
- 운동
- FragmentPagerAdapter
- overridePendingTraction
- 2020년 목표
- TabLayout and ViewPager
- 독서
- 재태크
- FragmentSatePagerAdapter
- 개발
- BottomNavigationViewEx
- FrameLayout
- 목표한번이뤄보자
- Today
- Total
seops
[Concepts] Factory Method Pattern 본문
[ 정의 ]
-> 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는
서브 클래스에서 결정하게 만듦
[ 구현 ]
public abstract class Pizzastore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type);
}
public class NYPizzaStroe extends PizzaStore {
Pizza createPizza(String item) {
if(item.equals("cheese") {
return new NYStyleCheesePizza();
} else if(item.equals("veggie") {
return new NYStyeVeggiePizza();
}....
}
}
public class PizzaTestDrive {
public static void main(String[] args) {
PizzaStore nyStore = new NYPizzaStore();
PizzaStore chicagoStore = new ChicagoPizzaStore();
Pizza pizza = nyStore.orderPizza("cheese");
System.out.println("Ethan ordered a " + pizza.getName() + "\n");
pizza = chicagoStore.orderPizza("cheese");
System.out.println("Joel ordered a " + pizza.getName() + "\n");
}
}
- abstract Product factoryMethod(String type) ~ abstract Pizza createPizza(String type);
-> 팩토리 메소드는 객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있다.
-> 이렇게 하면 슈퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리할 수 있다.
[ 보충 ]
1. 질의 응답
Q. 간단한 팩토리와 팩토리 메소드 패턴의 차이점을 아직 잘 모르겠어요. 팩토리 메소드 패턴에서는 피자를 리턴하는 클래스가 서브 클래스라는 덤을 제외하면 거의 똑같잖아요. 조금 더 자세히 설명해 주실 수 있나요?
A. 팩토리 메소드 패턴이 간단한 팩토리와 상당히 비슷하다는 지적은 맞습니다. 하지만 간단한 팩토리는 일회용 처방에 불과한 반면, 팩토리 메소드 패턴을 이용하면 어떤 구현을 사용할지를 서브클래스에서 결정하는 프레임워크를 만들 수 있다는 결정적인 차이점이 있다.
즉, 간단한 팩토리의 경우, 생성하는 제품을 마음대로 변경할 수 없다.
public class PizzaStore {
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory) {
this.factory = factory;
}
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
// 실 사용 클래스
public void main() {
NYPizzaFactory nyFactory = new NYPizzaFactory();
PizzaStore nyStore = new PizzaStore(nyFactory);
nyStore.order("Veggie");
ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory();
PizzaStore chicagoStore = new PizzaStore(chicagoFactory);
chicagoStore.order("Veggie");
}
2. 팩토리 메소트 패턴 장점
- 구상 클래스를 바탕으로 코딩을 하면, 나중에 코드를 수정해야 할 가능성이 높아지고 유연성이 떨어진다.
- 인터페이스를 바탕으로 코딩을 하면, 다형성 덕분에 어떤 클래스든 특정 인터페이스만 구현하면 사용할 수 있다.
반대로 코드에서 구상 클래스를 많이 사용하면, 새로운 구상 클래스가 추가될 때마다 코드를 고쳐야 하기 때문에 문제 발생 가능성이 높음
'Android > Design Pattern' 카테고리의 다른 글
[Development] Observer Pattern (0) | 2020.03.30 |
---|---|
[Concepts] Observer Pattern (0) | 2020.03.30 |