Skip to content

Latest commit

 

History

History
53 lines (38 loc) · 1 KB

File metadata and controls

53 lines (38 loc) · 1 KB
protocol Beverage {
  var description: String { get set }
  func cost() -> Int
}

protocol BeverateDecorator {
  var beverage: Beverage { get set }
  init(beverage: Beverage)
}

class ColdBrew: Beverage {
  var decription: String = "콜드브루"
  func cost() {
    return 4500
  }
}

class Mocha: BeverageDecorator {
  var description: String = "모카"
  var beverage: Beverage

  init(beverage: Beverage) {
    self.beverage = beverage
    self.description = beverage.description + "" + self.description
  }

  func cost() -> Int {
    return beverage.cost() + 500
  }
}

let coldBrew = ColdBrew()
let mocha = Mocha(beverage: coldBrew)
  • 장점 상속을 통한 하위 클래스를 만들지 않고 객체의 기능을 확장 런타임에서 객체에 책임을 추가하고 제거 가능 객체를 여러 데코레이터로 합칠 수 있다 SIP 원칙 가능

  • 단점 특정 래퍼를 제거 하기 어렵다 데코레이터 순서에 의존해야한다 코드 복잡도가 올라갈 수 있다.