μ€νλ² μ€ μλ£μ λν ν΄λμ€μ λν λ¬Έμ
Beverage λΌλ μΆμ ν΄λμ€λ₯Ό λ§λ€κ³ , ꡬ체 μλ£ ν΄λμ€λ€μ λ§λ€μμ
abstract class Beverage {
description // μλ£μ λν μ€λͺ
κ°
void getDescription() // μλ£μ λν μ€λͺ
κ°μ Έμ€κΈ°
int cost() // μλ£μ κ°κ²© μ°μ
}
λ°λΌμ, milk, soy, mocha λ± μ¬λ£λ₯Ό λκ³ , cost() ν¨μ λ΄μμ μ¬λ£μ κ°κ²©μ λνλ μμΌλ‘ κ°κ²© μ°μΆμ νκ³ μ ν¨
abstract class Beverage {
description // μλ£μ λν μ€λͺ
κ°
void getDescription() // μλ£μ λν μ€λͺ
κ°μ Έμ€κΈ°
int cost() // μλ£μ κ°κ²©μ μ°μ νλλ°, κ° μ¬λ£μ κ°κ²©μ λν΄μ μ΅μ’
κ°μ 리ν΄
// κ° μμκ° λ€μ΄κ°μ§ μλ€μ΄κ°μ§ μ νλ boolean variable
boolean soy
boolean milk
boolean mocha
...
boolean getSoy()
void setSoy()
...
}
μμ½λλ μ¬λ¬ λ¬Έμ λ₯Ό μΌκΈ° ν μ μμ
λ°λΌμ, μ£Όμ μλ£ μ¬νλ€μ λν ν΄λμ€λ₯Ό λκ³ , κ·Έ ν΄λμ€ κ°μ²΄λ₯Ό Mocha, Milk λ±μ λΆμ¬λ£μ ν΄λμ€λ‘ μ₯μνλ λ°©μμΈ λ°μ½λ μ΄ν° ν¨ν΄μ μ μ©
λ°μ½λ μ΄ν° ν¨ν΄μ΄λ
<aside> π‘ κ°μ²΄μ μΆκ°μ μΈ μ건μ λμ μΌλ‘ μΆκ°νκΈ° μν λμμΈ ν¨ν΄
</aside>
μ½λ μμ
abstract class Beverage {
description
abstract int cost()
}
// κΎΈλ°μ λ°λ ν΄λμ€
class HouseBlend extends Beverage
abstract class CondimentDecorator extends Beverage {
abstract String getDescription()
}
class Milk extends CondimentDecorator {
Beverage beverage;
public Milk(Beverage beverage) {
this.beverage = beverage;
}
int cost() {
return beverage.cost() + 300
}
String getDescription() {
return beverage.getDescription() + "μ°μ κ° μ²¨κ°λ"
}
}
// μ£Όλ¬Έ
Beverage beverage = new HouseBlend();
beverage = new Mocha(beverage);
beverage = new Mocha(beverage);
beverage = new Milk(beverage);
beverage // λͺ¨μΉ΄κ° λλ² μ²¨κ°λκ³ , μ°μ κ° μ²¨κ°λ μλ£κ° λμ΄
μ μμ¬ν
<aside> π‘ ν΄λμ€λ νμ₯μ λν΄μλ μ΄λ €μμ΄μΌ νμ§λ§, μ½λ λ³κ²½μ μμ΄μλ λ«ν μμ΄μΌ ν¨
</aside>