CS/Design Pattern

[디자인 패턴] 팩토리 패턴

pipes0512 2022. 8. 11. 16:34

팩토리 패턴(Factory Pattern)

객체의 생성을 추상화하여 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴 

장점

상위 클래스와 하위 클래스가 분리되기 때문에 의존성이 낮으며 상위 클래스에서는 인스턴스 생성 방식에 대해 알 필요가 없기 때문에 더 많은 유연성을 가짐 -> 하위 클래스의 인스턴스 생성 방식을 바꿔도 상위 클래스는 코드를 수정할 필요가 없음(알 필요 없음)

 

구현 예시

package DesignPattern;

//Super Class인 Coffee
abstract class Coffee {
	public abstract int getPrice();
	
	@Override
	public String toString() {
		return "Hi this coffee is " + this.getPrice();
	}
}
// Factory Class
class CoffeeFactory {
	public static Coffee getCoffee(String type, int price) {
		if ("Latte".equalsIgnoreCase(type)) {
			return new Latte(price);
		} else if ("Americano".equalsIgnoreCase(type)) {
			return new Americano(price);
		} else {
			return new DefaultCoffee();
		}
	}
}

//Sub Class인 DefaultCoffee, Latte, Americano

class DefaultCoffee extends Coffee {
	private int price;
	
	public DefaultCoffee() {
		this.price = -1;
	}
	
	@Override
	public int getPrice() {
		return this.price;
	}
}

class Latte extends Coffee {
	private int price;
	
	public Latte(int price) {
		this.price = price;
	}
	
	@Override
	public int getPrice() {
		return this.price;
	}
}

class Americano extends Coffee {
	private int price;
	
	public Americano(int price) {
		this.price = price;
	}
	
	@Override
	public int getPrice() {
		return this.price;
	}
}

public class HelloWorld {
	public static void main(String[] arg) {
		Coffee latte = CoffeeFactory.getCoffee("Latte", 4000);
		Coffee ame = CoffeeFactory.getCoffee("Americano", 3000);
		System.out.println("Factory latte ::" + latte);
		System.out.println("Factory latte ::" + ame);
	}

}

// 출력값
/*
Factory latte : Hi this coffee is 4000
Factory ame : Hi this coffee is 3000
*/

Reference

면접을 위한 CS 전공지식 노트 - 주홍철

https://readystory.tistory.com/117

https://velog.io/@ellyheetov/Factory-Pattern

https://biggwang.github.io/2019/06/28/Design%20Patterns/%5BDesign%20Patterns%5D%20%ED%8C%A9%ED%86%A0%EB%A6%AC%20%ED%8C%A8%ED%84%B4,%20%EB%8F%84%EB%8C%80%EC%B2%B4%20%EC%99%9C%20%EC%93%B0%EB%8A%94%EA%B1%B0%EC%95%BC-%EA%B8%B0%EB%B3%B8%20%EC%9D%B4%EB%A1%A0%ED%8E%B8/

 

'CS > Design Pattern' 카테고리의 다른 글

[디자인 패턴] 싱글톤 패턴  (0) 2022.08.11