객체를 Factory클래스에서 Template Method패턴을 이용하여 만드는 패턴
1. 코드
MyAbstractFactory : 객체 생성 실행 흐름을 기술한 상위 클래스
public abstract class MyAbstractFactory {
public final Product create(String owner) {
Product product = createProduct(owner);
registerProduct(product);
return product;
}
protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product product);
}
MyFactory : 실제 객체 생성를 하는 하위 클래스
public class MyFactory extends MyAbstractFactory {
private List<String> owners = new ArrayList<>();
public List<String> getOwners() {
return owners;
}
@Override
protected Product createProduct(String owner) {
return new Product(owner);
}
@Override
protected void registerProduct(Product product) {
owners.add(((Product)product).getOwner());
}
}
Product : 생성할 객체
public class Product{
private String owner;
public Product (String owner) {
this.owner = owner;
System.out.println(owner + "생성");
}
public String getOwner() {
return owner;
}
public void use() {
System.out.println(owner+"사용");
}
}
Main : test 클래스
public class Main {
public static void main(String[] args) {
MyAbstractFactory factory = new MyFactory();
Product product = factory.create("a");
Product product2 = factory.create("b");
product.use();
product2.use();
}
}
2. 특징
- 객체를 만드는 방식은 Factory에서 정하지만 구체적인 내용은 하위 클래스에서 정한다.
- 새로운 타입의 객체가 추가 될 때 기존 코드에 변화는 거의 없다. (클래스간에 결합도가 낮다)
3. 해당 패턴을 고려해볼만한 상황
- 동일한 기능을 하지만 다양한 형태가 존재하고, 객체 생성 시 동일한 로직이 필요한 경우
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Prototpye 패턴 (0) | 2021.01.03 |
---|---|
Singleton 패턴 (0) | 2021.01.01 |
Template Method 패턴 (1) | 2020.12.27 |
Adapter 패턴 (0) | 2020.12.27 |
iterator 패턴 (0) | 2020.12.27 |