-
데코레이터 패턴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
토비의 스프링
반응형'Java & 배경지식 > 패턴' 카테고리의 다른 글
프록시 패턴 - 백기선 (0) 2020.06.14 프록시 패턴 (0) 2020.02.17 Strategy Pattern(전략패턴) (0) 2020.02.13 Session Facade 패턴 (0) 2020.02.10 Transfer Object 패턴(Value Object) (0) 2020.02.10 - 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해서 프록시를 사용하는 패턴