Decorator Pattern
Decorator Pattern μ 리
Decorator Pattern
κ°μ²΄μ μΆκ°μμλ₯Ό λμ μΌλ‘ λν μ μλ€. μλΈν΄λμ€λ₯Ό λ§λλ κ²λ³΄λ€, λ μ μ°νκ² κΈ°λ₯μ νμ₯ν μ μλ€.
μ¦, μλμ κ°μ ꡬ쑰λ₯Ό κ°λ₯νκ² νλ€. μλ©λ¦¬μΉ΄λ Έ β νν μΆκ° β μ· μΆκ° β μ·μΆκ° β μ€νμΆκ° // μ κ°μ΄ κ³μ μ€μ²©μ μΌλ‘ κΈ°λ₯μ κ°μ§ μ μκ² νλ€.
κΈ°μ‘΄μ ν΄λμ€λ₯Ό νμ₯νλ λ°, μ¬κΈ°μ μμμ μ΄μ©νλ©΄ μ μ μ΄λ―λ‘ λ°νμμμ κ°μ²΄μ νλμ λ³κ²½ν μ μκ³ νλμ λΆλͺ¨λ§ μ νν΄μΌνλ μ μ½λ λ°λ₯Έλ€. μ΄μ μ§ν© κ΄κ³ νΉμ ν©μ± κ΄κ³λ₯Ό λ°λ₯Έλ€. Decoratorμμ Componentλ₯Ό ꡬμ±νμ¬, κΈ°λ₯μ μμλ°μ μ μλ€.
μ€μ μ½λ μμ
μ½λμμλ GitHubμμ κ°μ Έμμ΅λλ€.
[Decorater μΆμ ν΄λμ€]
1
2
3
4
public abstract class CondimentDecorator extends Beverage {
Beverage beverage;
public abstract String getDescription();
}
[Component μΆμ ν΄λμ€]
1
2
3
4
5
6
7
8
9
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost();
}
[κΈ°λ₯ ν μ€νΈ]
- DarkRoastμ°¨μ λͺ¨μΉ΄μ·μ 2κ° μΆκ°νκ³ , ννν¬λ¦Όμ μΆκ°νλ€.
- HouseBlendμ λμ μ λͺ¨μΉ΄λ₯Ό μΆκ°νκ³ , ννν¬λ¦Όμ μΆκ°νλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String args[]) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription()
+ " $" + beverage.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription()
+ " $" + beverage2.cost());
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
System.out.println(beverage3.getDescription()
+ " $" + beverage3.cost());
}
μ€νκ²°κ³Ό μλμ κ°μ΄ μΆλ ₯λλ€.
1
2
3
Espresso $1.99
Dark Roast Coffee, Mocha, Mocha, Whip $1.49
House Blend Coffee, Soy, Mocha, Whip $1.34
μμ κ°μ΄ μ§ννλ©΄, κΈ°μ‘΄μ μ»΄ν¬λνΈ(μ°¨)λ₯Ό λ°μ½λ μ΄ν°λ‘ κ°μΈλ©΄μ κΈ°λ₯μ λ°μ½λ μ΄ν°μκ² μμν μ μλ€. μ¦, λμ μΈ νμ₯μ΄ κ°λ₯νλ€. λͺκ°λ , μΈμ λ λ°μ½λ₯Ό μΆκ°ν μ μλ€.
λ¨μ
- κ°μ²΄λ₯Ό μ²μμ μ΄κΈ°ννλ λ°, μ½λκ° λ§μ΄ νμνλ€. μμμλ μ΄κΈ°ννλλ°, μ΄λ κ² λ§μ μ½λκ° νμνλ€.
1
2
3
4
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
- λ§μ ν΄λμ€λ€λ‘ μΈν΄, μ΄ν΄νκΈ° 볡μ‘ν μ μλ€.
νΉμ νμμ μμ‘΄νλ μ½λμ λμ νλ©΄ μλ§μ΄ λλ€.(μλλ GPT-4 μμ)
μλ₯Ό λ€μ΄,
Bird
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μꡬνλ ν¨μκ° μκ³ ,FlyingBirdDecorator
λ‘Bird
μΈμ€ν΄μ€λ₯Ό λ°μ½λ μ΄νΈν κ²½μ°, λ°μ½λ μ΄νΈλ κ°μ²΄λ λ μ΄μBird
νμ μ΄ μλκ² λ©λλ€. λ°λΌμ μ΄ ν¨μμ λ°μ½λ μ΄νΈλ κ°μ²΄λ₯Ό μ λ¬νλ €κ³ νλ©΄ νμ λΆμΌμΉ λ¬Έμ κ° λ°μν μ μμ΅λλ€.