에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. OCP
- 새로운 행동을 추가하여 확장
- 기존 코드를 수정 필요 없음
2. 데코레이터 패턴
- 모든 서브클래스를 위한 필드들을 슈퍼클래스에서 가질 경우, 일부 서브클래스에서는 적합하지 않은 필드를 가져야 함
- 이를 해결하기 위해 장식을 달고, 장식에게 위임
데코레이터 형식
- 감싸는 객체의 형식과 같음 (상속을 사용해서 형식을 맞춤)
이점
- 객체에 추가 요소를 동적으로 더할 수 있음
- 여러 개의 데코레이터로 감쌀 수 있음
- 자신이 장식하고 있는 객체에게 작업을 위임하는 일 말고도 추가 작업을 수행할 수 있음
3. 스타버즈
Beverage
public abstract class Beverage {
private String descript;
public String getDescript() { return descript; }
public abstract double cost();
}
public class Espresso extends Beverage {
public Espresso() { descript = "에스프레소"; }
public double cost() { return 1.99; }
}
public class HouseBlend extends Beverage {
public HouseBlend() { descript = "하우스 블렌드 커피"; }
public double cost() { return .89; }
}
Condiment (Decorator)
public abstract class CondimentDecorator extends Beverage {
private Beverage beverage;
public abstract String getDescript();
}
- Beverage: 각 데코레이터가 감쌀 음료를 나타내는 객체
public class Mocha extends CondimentDecorator {
public Mocha(Beverage beverage) { this.beverage = beverage; }
public String getDescript() { return beverage.getDescript() + ", 모카"; }
public double cost() { return beverage.cost() + .02; }
}
4. 대표적인 예
- java.io
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴 (1) | 2024.12.16 |
---|---|
[헤드퍼스트 디자인 패턴] 4. 팩토리 패턴 (0) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 2. 옵저버 패턴 (0) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 0. 디자인 패턴이란 (1) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 1. 전략 패턴 (2) | 2024.12.16 |