[자바 디자인 패턴] 구조패턴 - 데코레이터 패턴
구조패턴 목록
- 어댑터 패턴 (Adapter Pattern)
- 브릿지 패턴 (Bridge Pattern)
- 컴포짓 패턴 (Composite Pattern)
- 데코레이터 패턴 (Decorator Pattern)
- 퍼사드 패턴 (Facade Pattern)
- 플라이웨이트 패턴 (Flyweight Pattern)
- 프록시 패턴 (Proxy Pattern)
같은 계층에 있는 객체들 중에서 몇가지만 다른 로직을 적용하고 싶은 경우에 사용하면 유용할 것 같다.
장점
- 정적 상속보다 유연성이 뛰어납니다.
- 새 클래스를 코딩하여 변경하기 때문에 오브젝트의 확장성을 향상시킵니다..
- 모든 동작을 객체로 코딩하는 대신 대상 클래스에서 일련의 기능을 개발할 수 있도록하여 코딩을 단순화합니다.
사용시기
- 다른 객체에 영향을 미치지 않고 객체에 투명하고 동적으로 책임을 추가하려는 경우
- 나중에 변경하려는 객체에 책임을 추가하려는 경우
- 서브 클래싱으로 기능을 확장하는 것은 더 이상 실용적이지 않습니다.
UML
Interface Class : Food
public interface Food {
public String prepareFood();
public double foodPrice();
}
Model Class : VegFood, NonVegFood, ChineeseFood
public class VegFood implements Food {
public String prepareFood(){
return "Veg Food";
}
public double foodPrice(){
return 50.0;
}
}
public class NonVegFood extends FoodDecorator{
public NonVegFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Roasted Chiken and Chiken Curry ";
}
public double foodPrice() {
return super.foodPrice()+150.0;
}
}
public class ChineeseFood extends FoodDecorator{
public ChineeseFood(Food newFood) {
super(newFood);
}
public String prepareFood(){
return super.prepareFood() +" With Fried Rice and Manchurian ";
}
public double foodPrice(){
return super.foodPrice()+65.0;
}
}
Decorator Class : FoodDecorator
public abstract class FoodDecorator implements Food{
private Food newFood;
public FoodDecorator(Food newFood) {
this.newFood=newFood;
}
@Override
public String prepareFood(){
return newFood.prepareFood();
}
public double foodPrice(){
return newFood.foodPrice();
}
}
Operation Class : DecoratorPatternCustomer
public class DecoratorPatternCustomer {
public static void main(String args[]) throws NumberFormatException, IOException {
VegFood vf=new VegFood();
System.out.println(vf.prepareFood());
System.out.println(vf.foodPrice());
Food f1=new NonVegFood((Food) new VegFood());
System.out.println(f1.prepareFood());
System.out.println(f1.foodPrice());
Food f2=new ChineeseFood((Food) new VegFood());
System.out.println(f2.prepareFood());
System.out.println(f2.foodPrice());
}
}
'JAVA > Design Patterns' 카테고리의 다른 글
[아키텍처 패턴] MVC 모델2 (0) | 2021.11.12 |
---|---|
[자바 디자인 패턴] 구조패턴 - 프록시 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 구조패턴 - 플라이웨이트 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 구조패턴 - 퍼사드 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 구조패턴 - 컴포짓 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 구조패턴 - 브릿지 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 구조패턴 - 어댑터 패턴 (0) | 2021.03.17 |
[자바 디자인 패턴] 생성패턴 - 오브젝트풀 패턴 (0) | 2021.03.17 |