09 데코레이터 모드(Decorator Design Pattern)
장식기 모드에서는 기존 대상에 새로운 기능을 추가할 수 있으며 구조를 바꾸지 않습니다.그것은 기존 종류에 대한 포장이다.
이런 모델은 장식 클래스를 만들고 클래스 방법의 서명 완전성을 유지하는 전제에서 추가 기능을 제공한다.
만약에 우리가 서로 다른 유형의 자동차를 실현하고자 한다면 - 우리는 자동차의 인터페이스를 만들고 몇 가지 방법을 정의할 수 있다. 그 다음에 기초적인 자동차 추상 클래스를 만들고 이 기초적인 자동차 클래스를 통합하여 구체적인 유형의 자동차를 만들 수 있다. 그것이 바로 스포츠카와 럭셔리카이다.
그러나 우리가 스포츠카와 럭셔리카 기능을 겸비한 자동차를 동적으로 얻으려면 실현은 복잡할 것이다.만약 우리가 어떤 기능을 먼저 추가해야 하는지를 지정하고 싶다면, 그것은 더욱 복잡해질 것이다.지금 우리가 10가지 다른 유형의 자동차를 가지고 있다면 계승과 조합의 실현 논리로 관리할 수 없을 것이라고 상상해 보자.이러한 프로그래밍 상황을 해결하기 위해 우리는 자바에서 장식기 모드를 응용한다.
우리는 장식기 모드를 실현하기 위해 유형이 필요하다.
Component Interface
추상 구성 요소, 인터페이스나 추상 클래스로 우리가 실현할 방법을 정의합니다.
public interface Car{
//
public void assemble();
}
Component Implementation
특정 구성 요소
public class BasicCar implements Car{
@Override
public void assemble(){
System.out.println("Basic Car.");
}
}
Decorator
추상 장식기 클래스는 구성 요소 인터페이스를 실현하고 구성 요소 인터페이스와HAS-A 관계를 가진다.구성 요소 변수는 장식기 종류에 접근할 수 있기 때문에 이 변수를 보호할 것입니다.
public abstract class CarDecorator implements Car{
protected Car car;
public CarDecorator(Car c){
this.car =c;
}
@Override
public void assemble(){
this.car.assemble();
}
}
Concrete Decorators
구체적인 장식기, 기본 장식기의 기능을 통합하고 해당하는 구성 요소를 수정하는 행위.우리는 구체적인 장식기 종류인 LuxuryCar와 SportsCar를 만들 수 있습니다.
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 LuxuryCar extends CarDecorator{
public LuxuryCar(Car c){
super(c);
}
@Override
public void assemble(){
super.assemble();
System.out.print("Adding features of Luxury Car.");
}
}
Decorator Design Pattern Test Program
public class DecoratorPatternTest {
public static void main(String[] args) {
Car sportsCar = new SportsCar(new BasicCar());
sportsCar.assemble();
System.out.println("
*****");
Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar()));
sportsLuxuryCar.assemble();
}
}
Decorator Design Pattern – Important Points
4
4
4
총결산
이점:
4
4
단점:
4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.