03. Decorator Pattern
8904 단어 Design PatternJavaDesign Pattern
객체에 추가적인 책임을 동적으로 부여
상속을 사용하지 않아도 유연하고 융통성 있는 기능 확장을 가능하게 함
- Component: 각 구성 요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있음 (class or interface)
- ConcreteComponent: 새로운 행동을 동적으로 추가
- Decorator: 자신이 장식할 구성요소와 같은 인터페이스 or 추상 클래스
- ConcreteDecorator: 그 객체가 장식하고 있는 것
예시 - 스타버즈 음료
- Component
기본이 되는 클래스 - 여기서부터 상속을 받음
public abstract class Beverage {
private String description = "제목 없";
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public abstract double cost();
}
- concreteComponent
public class HouseBlend extends Beverage{
public HouseBlend() {
super.setDescription("하우스 블렌드 커피");
}
@Override
public double cost() {
return .89;
}
}
- Decorator
추상 클래스로 구현
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
- ConcreteDecorator
public class Mocha extends CondimentDecorator{
private Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
@Override
public double cost() {
return beverage.cost() + .20;
}
@Override
public String getDescription() {
return beverage.getDescription() + ", 모카";
}
}
- Main
public class Main {
public static void main(String[] args) {
Beverage beverage = new HouseBlend();
beverage = new Mocha(beverage); // 데코레이터로 beverage 감싼다.
System.out.println(beverage.getDescription());
}
}
Author And Source
이 문제에 관하여(03. Decorator Pattern), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jimin3263/03.-Decorator-Pattern저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)