728x90
Factory Method Pattern
object를 생성하는 interface를 정의지만 instantiation할 클래스를 subclass에 위임하는 것이다.
어떤 class를 instantiation할지 subclass에서 결정하기 위해서는 object를 어떻게 생성해야 할까?
어떻게 instantiation를 subclass로 위임할 수 있을까?
Creator클래스 내부에 object를 직접적으로 생성 할 수 있도록 한다. 이것은 Creator클래스가 특정 object를 승인해주고 이 클래스로부터 독립적으로 instantiation를 변경하는 것은 불가능하게 한다.
solution
결합을 느슨하기 위해 Creator Interface를 상속받아 Creator1을 만들고 factoryMethod내에 new Product1을 사용한다.
package FactoryMethodPattern.AbstractFM;
import FactoryMethodPattern.Creator;
import product.Product;
import product.Product1;
public class Creator1 extends Creator {
@Override
public Product factoryMethod() {
return new Product1();
}
}
Advantages
- 구현에 대한 의존성을 회피할 수 있다.
- Creator클래스는 구체적인 클래스를 직접적으로 instantiation하지 않는다.
- subclass에 instantiation을 위임하기 때문에 독립적이다.
Disadvantages
- 많은 subclass가 필요하다.
- 새로운 subclass는 어떤 object가 생성될지에 대하여 정의하거나 변경하여야한다.
- subclass의 필요성은 클래스 hierarchy가 존재할 때만 좋다.
Abstract Factory Pattern 차이점
- Abstract Factory Pattern과의 차이점은 factory method는 하나의 method만 가지고 있고, abstract factory는 여러가지 factory method를 가지는 object하는 점이다.
AbstractFactory
public class Factory2 implements AbstractFactory {
private Product productA;
private Product productB;
@Override
public Product createProductA() {
System.out.println("Factory2 : Creating a ProductA2 Object");
return new ProductA2();
}
@Override
public Product createProductB() {
System.out.println("Factory2 : Creating a ProductB2 Object");
return new ProductB2();
}
}
Factory Method
public class Creator1 extends Creator {
@Override
public Product factoryMethod() {
return new Product1();
}
}
- Factory Method Pattern은 인스턴화할 subclass의 의존한다.
[전체소스]
https://github.com/jKyounju/adapterPatterns/tree/master/src/FactoryMethodPattern
728x90
'Theory > Design Pattern' 카테고리의 다른 글
Bridge Pattern (0) | 2022.04.24 |
---|---|
Prototype Pattern (0) | 2022.04.23 |
Builder Pattern (0) | 2022.03.29 |
ABSTRACT FACTORY PATTERN (0) | 2022.03.27 |
ADAPTER PATTERN (0) | 2021.07.22 |
댓글