Server

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

Raconer 2024. 2. 3. 16:21
728x90

설명

여러개의 타입(콘텐츠, 미디어) 별 통계,정산 하는 추상 팩토리 패턴 생성

// 통계 인터페이스
interface 통계 {
    fun 작업1()
}

// 정산 인터페이스
interface 정산 {
    fun 작업2()
}

// 콘텐츠통계
class 콘텐츠통계 : 통계 {
    override fun 작업1() {
        println("콘텐츠통계 작업1")
    }
}

// 미디어통계
class 미디어통계 : 통계 {
    override fun 작업1() {
        println("미디어통계 작업1")
    }
}

// 콘텐츠정산
class 콘텐츠정산 : 정산 {
    override fun 작업2() {
        println("콘텐츠정산 작업2")
    }
}

// 미디어정산
class 미디어정산 : 정산 {
    override fun 작업2() {
        println("미디어정산 작업2")
    }
}

// 추상 팩토리 인터페이스
interface 추상공장 {
    fun 생성통계(): 통계
    fun 생성정산(): 정산
}

// 콘텐츠 공장
class 콘텐츠공장 : 추상공장 {
    override fun 생성통계(): 통계 {
        return 콘텐츠통계()
    }

    override fun 생성정산(): 정산 {
        return 콘텐츠정산()
    }
}

// 미디어 공장
class 미디어공장 : 추상공장 {
    override fun 생성통계(): 통계 {
        return 미디어통계()
    }

    override fun 생성정산(): 정산 {
        return 미디어정산()
    }
}

fun main() {
    val type = "contents" // 또는 "media"로 변경 가능

    // 해당하는 타입에 따라 공장 선택
    val factory: 추상공장 = when (type) {
        "contents" -> 콘텐츠공장()
        "media" -> 미디어공장()
        else -> throw IllegalArgumentException("지원하지 않는 타입입니다.")
    }

    // 선택된 공장을 통해 객체 생성
    val 통계: 통계 = factory.생성통계()
    val 정산: 정산 = factory.생성정산()

    // 생성된 객체 사용 예제
    통계.작업1()
    정산.작업2()
}
728x90