09 데코레이터 모드(Decorator Design Pattern)

2874 단어
데코더 모드는 기존 객체를 동적으로 수정하는 기능에 사용됩니다.같은 종류의 다른 실례는 수정의 영향을 받지 않고 단일 대상만 수정된 행위를 받을 수 있다.
장식기 모드에서는 기존 대상에 새로운 기능을 추가할 수 있으며 구조를 바꾸지 않습니다.그것은 기존 종류에 대한 포장이다.
이런 모델은 장식 클래스를 만들고 클래스 방법의 서명 완전성을 유지하는 전제에서 추가 기능을 제공한다.
만약에 우리가 서로 다른 유형의 자동차를 실현하고자 한다면 - 우리는 자동차의 인터페이스를 만들고 몇 가지 방법을 정의할 수 있다. 그 다음에 기초적인 자동차 추상 클래스를 만들고 이 기초적인 자동차 클래스를 통합하여 구체적인 유형의 자동차를 만들 수 있다. 그것이 바로 스포츠카와 럭셔리카이다.
그러나 우리가 스포츠카와 럭셔리카 기능을 겸비한 자동차를 동적으로 얻으려면 실현은 복잡할 것이다.만약 우리가 어떤 기능을 먼저 추가해야 하는지를 지정하고 싶다면, 그것은 더욱 복잡해질 것이다.지금 우리가 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
  • 장식기 모드는 JAVA IO 클래스, 예를 들어 FileReader, BufferedReader 등에 대량으로 사용된다

  • 총결산


    이점:
    4
  • 하나의 클래스의 기능을 확장합니다

  • 4
  • 동적 증가 기능, 동적 취소

  • 단점:
    4
  • 다층 장식이 비교적 복잡하다
  • 좋은 웹페이지 즐겨찾기