티스토리 뷰

728x90

팩토리 패턴(factory pattern)

개념

- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴

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

 

장점

- 느슨한 결합

- 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 가짐

- 객체 생성 로직이 분리되어 있기 때문에 유지 보수성이 증가됨

 

단점

- 새로 생성할 객체가 늘어날 때마다, Factory 클래스에 추가해야 되기 때문에 클래스가 많아짐

 

코드

abstract class Coffee {
	public abstract int getPrice();
    
    @Override
    public String toString() {
    	return "This coffee is " + this.getPrice();
    }
}

class CoffeeFactory {
	pulbic 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();
        }
    }
}

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 Hello {
	public static void main(String[] args) {
    	Coffee latte = CoffeeFactory.getCoffee("Latte", 4000);
        Coffee americano = CoffeeFactory.getCoffee("Americano", 3000);
        System.out.println("latte :: " + latte);
        System.out.println("americano :: " + americano);
    }
}

/*
latte :: This coffee is 4000
americano :: This coffee is 3000
*/
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday