반응형
3. Decorator Pattern :
- 객체에 추가 요소를 동적으로 더할 수 있다.
- 데코레이터 패턴을 사용하면 서브 클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다.
- 특정 요소의 형식을 알아내서 그 결과를 바탕으로 작업해야 하는 코드에는 적합하지 않다.
- 데코레이터는 팩토리나 빌더 같은 다른 패턴을 써서 사용되는 경우가 많다.
1. Beverage.java(Abstract Class)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package chap3; public abstract class Beverage { String desc = "No name"; public String getDesc(){ return desc; } public abstract double cost(); public String toString() { return getDesc()+" : "+ cost(); } } | cs |
2. CodimentDecorator(Abstract Class)
1 2 3 4 5 6 7 | package chap3; public abstract class CodimentDecorator extends Beverage { // 모든 첨가물(Decorator)에서 강제 Override 하도록 만듬 public abstract String getDesc(); } | cs |
3. Espresso.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package chap3; public class Espresso extends Beverage{ public Espresso() { desc = "Espresso"; } @Override public double cost() { // TODO Auto-generated method stub return 1.99; } } | cs |
4. Milk.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package chap3; public class Milk extends CodimentDecorator{ private Beverage beverage; public Milk(Beverage b) { this.beverage = b; } @Override public String getDesc() { // TODO Auto-generated method stub return beverage.getDesc() + ", Milk"; } @Override public double cost() { // TODO Auto-generated method stub return beverage.cost() + .1; } } | cs |
5. CoffeeShop.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package chap3; public class CoffeeShop { public static void main(String[] args) { Beverage b1 = new Espresso(); System.out.println(b1.toString()); b1 = new Mocha(b1); b1 = new Milk(b1); System.out.println(b1.toString()); Beverage b2 = new HouseBlend(); System.out.println(b2.toString()); b2 = new Whip(b2); System.out.println(b2.toString()); } } | cs |
반응형
'Computer Science > Theory-Java' 카테고리의 다른 글
[Java] 자바 디자인패턴 #2 - Observer Pattern (0) | 2016.06.27 |
---|---|
[Java] 자바 디자인패턴#1 - Strategy Pattern (0) | 2016.06.27 |
댓글