Java & 배경지식/패턴
데코레이터 패턴
레알윙
2020. 2. 17. 20:40
반응형
public interface Car {
public void assemble();
}
public class BasicCar implements Car {
@Override
public void assemble() {
System.out.print("Basic Car.");
}
}
public class CarDecorator implements Car {
protected Car car;
public CarDecorator(Car c){
this.car=c;
}
@Override
public void assemble() {
this.car.assemble();
}
}
public class LuxuryCar extends CarDecorator {
public LuxuryCar(Car c) {
super(c);
}
@Override
public void assemble(){
super.assemble();
System.out.print(" Adding features of Luxury Car.");
}
}
public class SportsCar extends CarDecorator {
public SportsCar(Car c) {
super(c);
}
@Override
public void assemble(){
super.assemble();
System.out.print(" Adding features of Sports Car.");
}
}
public class Test {
public static void main(String[] args) {
Car sportsCar = new SportsCar(new BasicCar());
sportsCar.assemble();
System.out.println("\n*****");
//방법 1
Car sportsLuxuryCar = new LuxuryCar(new SportsCar(new BasicCar()));
//방법 2
Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar()));
sportsLuxuryCar.assemble();
System.out.println("\n*****");
// 안되는 코드들
// Car car = new LuxuryCar(new SportsCar());
// Car car2 = new SportsCar(new LuxuryCar());
}
}
데코레이터 패턴이란?
- 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해서 프록시를 사용하는 패턴
- 다이나믹이란
- 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻
- 다이나믹이란
- 프록시가 한개로 제한되지 않으며, 프록시가 직접 타깃을 사용하도록 고정시킬필요가 없다.
- 인터페이스를 구현한 타켓과 여러개의 프록시를 사용 가능
- 순서를 정해서 단계적으로 위힘하는 구조로 만들면 됨
- 결과를 보게 된다면 기본차가 부품추가해서 스포츠카가되고, 럭셔리한 자동차가 된다. 이렇게 객체를 꾸며주는 것이 데코레이터 패턴이라한다.
- 데코레이션은 순서에 상관없고, 꾸밀 속성을 가지는 기본 객체가 꼭 필요
참고
https://meaownworld.tistory.com/91
토비의 스프링
반응형