팩토리 패턴(Factory Pattern)
말 그대로, 공장과 같은 디자인 패턴이다.
객체를 어떻게 생성할 것인지에 대한 클래스 하나와
객체 생성만 하는 클래스 하나가 결합되어 동작한다.
예를 들면, 음식 레시피를 가진 클래스 하나와 그 레시피를 가지고 음식을 만들어내는 클래스 하나가 결합된 것이다.
이렇게 되면 장점은 유지보수성이 증가한다.
객체를 생성하는 로직이 따로 존재하기 때문에, 느슨한 결합을 가지며 이는 곧 유지보수성의 증가로 이어진다.
package factory; // 아이스크림 -> 기본, 딸기, 초코
// 기본 1000, 딸기 2000, 초코 3000
abstract class IceCream {
public abstract int getPrice();
@Override
public String toString() {
return "Hi, this ice cream is " + getPrice();
}
}
class DefaultIceCream extends IceCream {
private int price;
public DefaultIceCream(int price) {
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
}
class StrawberryIceCream extends IceCream {
private int price;
public StrawberryIceCream(int price) {
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
}
class ChocolateIceCream extends IceCream {
private int price;
public ChocolateIceCream(int price) {
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
}
class IceCreamFactory {
public static IceCream getIceCream(String type, int price) {
if("Strawberry".equalsIgnoreCase(type)) {
return new StrawberryIceCream(price);
}
else if("Chocolate".equalsIgnoreCase(type)) {
return new ChocolateIceCream(price);
}
return new DefaultIceCream(price);
}
}
public class FactoryTest {
public static void main(String[] args) {
IceCream strawberry = IceCreamFactory.getIceCream("Strawberry", 2000);
IceCream chocolate = IceCreamFactory.getIceCream("Chocolate", 3000);
System.out.println("Factory strawberry : " + strawberry);
System.out.println("Factory chocolate : " + chocolate);
}
}
위 코드는 아이스크림의 레시피와 아이스크림을 만들어내는 공장의 형태 코드이다.
맛 레시피를 위한 클래스 3개와 이를 바탕으로 만들어내는 클래스 하나가 결합해 작동되고 있다.
'Develop > Design Pattern' 카테고리의 다른 글
옵저버 패턴이란? (0) | 2022.08.17 |
---|---|
싱글톤 패턴이란? (0) | 2022.07.26 |
디자인 패턴이란? (0) | 2022.07.25 |