서브 시스템, 라이브러리의 복잡한 내부구현을 모두 알고 있지 않고서도 개발자가 사용할 수 있도록 간략화된 인터페이스를 제공하도록 하는 디자인 패턴.
- 라이브러리를 사용하는 쪽에서 코드를 조금 더 읽기 쉽게 만들어준다.
- 부 구현을 알 필요 없이, 퍼사드 인터페이스(또는 구현체)를 통해서 간단하게 사용할 수 있다.
- Decorator패턴과 차이점으로 라이브러리 혹은 API의 인터페이스가 복잡할 경우에 간단하게 변경하여 쉽게 사용하기 위한 디자인 패턴이다.
interface Package {
fun process()
}
class PackageA : Package {
override fun process() {
println("패키지A 실행")
}
}
class PackageB : Package {
override fun process() {
println("패키지B 실행")
}
}
class PackageC : Package {
override fun process() {
println("패키지C 실행")
}
}
fun main() {
val packageA = PackageA()
packageA.process()
val packageB = PackageB()
packageB.process()
val packageC = PackageC()
packageC.process()
}
interface Processor {
fun processAll()
}
class ProcessorFacade(
private val packageA: PackageA,
private val packageB: PackageB,
private val packageC: PackageC
) : Processor {
override fun processAll() {
packageA.process()
packageB.process()
packageC.process()
}
}
fun main() {
val processorFacade = ProcessorFacade(
packageA = PackageA(),
packageB = PackageB(),
packageC = PackageC()
)
processorFacade.processAll()
}