오늘도 더 나은 코드를 작성하였습니까?

SimpleFactory pattern 본문

디자인패턴/생성패턴

SimpleFactory pattern

hik14 2021. 12. 28. 19:26

SimpleFactory는 하나의 디자인 패턴이라 보기 힘들지만 자주 사용되고 중요하다.

 

객체를 만들어 반환하는 함수를 (생성자 대신) 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법.

객체를 사용하는 측에서 팩토리를 이용해서 필요한 원재료 및 생성하려는 객체를 주문하면 그것을 팩토리가 생성해서 제공하여 클라이언트 는 구체적인 객체 생성 로직을 알 필요가 없기 때문에 의존성을 낮아진다.

fun main() {

    val iceCream: IceCream = IceCreamFactory.creator(CHOCOLATE)
    println(iceCream)

}

abstract class IceCream()

class ChocoLateIceCream() : IceCream(){
    override fun toString(): String {
        return "초코 아이스크림"
    }
}

class StrawberryIceCream() : IceCream(){
    override fun toString(): String {
        return "딸기 아이스크림"
    }
}

class VanillaIceCream() : IceCream(){
    override fun toString(): String {
        return "바닐라 아이스크림"
    }
}

enum class IceCreamMaterial {
    STRAWBERRY, 
    CHOCOLATE,
    VANILLA,
}

class IceCreamFactory{
    companion object {
        fun creator(material: IceCreamMaterial): IceCream =
            when (material) {
                STRAWBERRY -> {
                    StrawberryIceCream()
                }
                CHOCOLATE -> {
                    ChocoLateIceCream()
                }
                VANILLA -> {
                    VanillaIceCream()
                } 
            }
    }
}