Factory Method Pattern은 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.
부모 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
- Factory에 기본 역할을 정의하는 객체
- Creator를 채택하고 있으며 Product에 맞는 구체적 기능을 구현
- Concrete Product가 해야할 동작들을 선언하는 객체
- Product를 채택하며 그에 맞게 만든 실제 객체
import Foundation
protocol AppleFactory {
func createElectronics() -> Product
}
class IPhoneFactory: AppleFactory {
func createElectronics() -> Product {
return IPhone()
}
}
class IPadFactory: AppleFactory {
func createElectronics() -> Product {
return IPad()
}
}
protocol Product {
func produceProduct()
}
class IPhone: Product {
func produceProduct() {
print("IPhone was made")
}
}
class IPad: Product {
func produceProduct() {
print("IPad was made")
}
}
class Client {
func order(factory: AppleFactory) {
let electronicsProduct = factory.createElectronics()
electronicsProduct.produceProduct()
}
}
var client = Client()
client.order(factory: IPadFactory())
protocol Shape {
func draw()
}
class Rectangle: Shape {
func draw() {
print("Rectangle")
}
}
class Circle: Shape {
func draw() {
print("Circle")
}
}
class ShapeFactory {
func createShape(type: String) -> Shape? {
switch type {
case "rectangle":
return Rectangle()
case "circle":
return Circle()
default:
return nil
}
}
}
let factory = ShapeFactory()
if let shape1 = factory.createShape(type: "rectangle") {
shape1.draw()
}
if let shape2 = factory.createShape(type: "circle") {
shape2.draw()
}
제가 학습한 내용을 요약하여 정리한 것입니다. 내용에 오류가 있을 수 있으며, 어떠한 피드백도 감사히 받겠습니다.
감사합니다.