본문 바로가기

디자인 패턴/Java언어로 배우는 디자인패턴 입문 책 정리

Factory Method 패턴

객체를 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