swift 디자인패턴 - Facade Pattern
퍼사드 패턴의 키워드는 단순한 접근이다. 복잡한 서브시스템을 단순한 하나의 시스템인 퍼사드 클래스를 이용해서 간단하게 접근하게 한다는 개념이다.
- Facade
- 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고 있습니다.
- 클라이언트의 요청을 적절한 Subsystem에게 전달합니다.
- Subsystem
- Subsystem 기능을 구현합니다.
- Facade 객체에서 전달받은 요청을 처리합니다.
- 서브 시스템 클래스들은 Facade 객체의 존재를 모릅니다.
- Client
- 클라이언트는 서브 시스템 객체를 직접 호출하는 대신 Facade를 사용합니다.
import Foundation
/// 서브 시스템 1
class Subsystem1 {
func operation1() -> String {
return "subSystem1: ready! \n"
}
func operationN() -> String {
return "subSystem1: Go! \n"
}
}
/// 서브 시스템 2
class Subsystem2 {
func operation2() -> String {
return "subSystem2: ready! \n"
}
func operationZ() -> String {
return "subSystem2: Fire! \n"
}
}
/// 특정 클래스의 동작을 한번에 또는 순차적으로 실행시켜주는 클래스
class Facade {
private var subsystem1: Subsystem1
private var subsystem2: Subsystem2
init(subsystem1: Subsystem1 = Subsystem1() ,
subsystem2: Subsystem2 = Subsystem2()) {
self.subsystem1 = subsystem1
self.subsystem2 = subsystem2
}
func operation() -> String {
var result = " 퍼사드 초기화 시스템 작동 : \n"
result += " " + subsystem1.operation1()
result += " " + subsystem2.operation2()
result += "\n" + " 퍼사드 하위 시스템 순서대로 작동 시작 : \n"
result += " " + subsystem1.operationN()
result += " " + subsystem2.operationZ()
return result
}
}
/// 퍼사드 객체에 서브시스템 1, 2의 객체를 참조시켜서 한번에 실행시키도록 한다.
let facade = Facade(subsystem1: Subsystem1(), subsystem2: Subsystem2())
print(facade.operation())
/*
퍼사드 초기화 시스템 작동 :
subSystem1: ready!
subSystem2: ready!
퍼사드 하위 시스템 순서대로 작동 시작 :
subSystem1: Go!
subSystem2: Fire!
*/
참고
https://github.com/jaicoco/Swift_Design_Pattern_Study
'아이폰 개발 > 디자인 패턴' 카테고리의 다른 글
swift 디자인 패턴 - 전략패턴(스트래티지 패턴) (0) | 2022.11.02 |
---|---|
디자인 패턴 - solid 원칙 정리 1 (0) | 2022.11.02 |
swift 디자인패턴 - State Pattern (0) | 2021.08.22 |
swift 디자인패턴 - Strategy Pattern (0) | 2021.08.22 |
swift 디자인패턴 - Adapter Pattern (0) | 2021.08.21 |