CS/디자인 패턴

Factory Method

bonevillain 2023. 9. 16. 18:31

느낌 상으로는 Template Method 패턴의 확장팩 버전 같다.

 

인스턴스 생성할 클래스(Product)와 생성시켜주는 클래스(Factory)의 형태를 미리 정의(abstract)해놓고

하위 클래스에서 둘 다 구현시켜줌.

이 때, Template Method 패턴과 동일하게 생성되는 과정(예: 각종 옵션 값에 따라서 생성되는 인스턴스를 달리해주고 생성된 인스턴스 고유번호를 어디에 저장하고 등등..)은 클래스(Factory)에서 구현되어 있음.

 

다시 간단하게 설명하면

제품과 공장 및 제품 생성 구조(뼈대)는 이미 구성되어 있고 나머지는 하위 클래스에서 모두 구현한다고 보면 된다.

 

 

// 제품 frame
public abstract class Product {
	public abstract void print();
}

// 공장 frame
public abstract class Factory {
	protected abstract Product createProduct(String name);
    
    // 제품 인스턴스가 생성되는 과정은 고정
	public final Product create(String name){
    	Product product = createProduct(name);
        product.setNumber(랜덤 숫자값);
        return product;
    }
}

// 제품 구현
public class Phone extends Product {
	private String name;
    private int number;
    
	Phone(String name){
    	this.name = name;
    }
    public void setNumber(int number){
		this.number = number;    	
    }

	public void print(){
    	System.out.println("제품 종류 : 휴대폰");
    }
}

// 공장 구현
public class PhoneFactory extends Factory {
	// 직접 제품 생성은 하위 클래스에서
	protected Product createProduct(String name){
    	return new Phone(name);
    }
}

'CS > 디자인 패턴' 카테고리의 다른 글

Template Method  (0) 2023.09.16
디자인 패턴 종류  (0) 2023.09.16