java 장식 모드(Decorator Pattern) 상세 정보 및 실례 코드

3135 단어 javaDecoratorPattern
데코더 모드(Decorator Pattern)는 기존 객체에 새 기능을 추가하고 구조를 변경하지 않습니다.이런 유형의 디자인 모델은 구조형 모델에 속하는데 이것은 기존의 유형으로서의 포장이다.
이런 모델은 기존의 클래스를 포장하고 클래스 방법의 서명 완전성을 유지하는 전제에서 추가 기능을 제공하는 장식 클래스를 만들었다.
우리는 아래의 실례를 통해 장식기 모드의 사용을 보여 준다.그 중에서 우리는 하나의 형상을 서로 다른 색깔로 장식할 뿐만 아니라 형상류도 바꾸지 않을 것이다.
실현
Shape 인터페이스와 Shape 인터페이스를 구현한 실체 클래스를 만들 것입니다.그리고 우리는 Shape 인터페이스를 실현하는 추상적인 장식 클래스인 ShapeDecorator를 만들고 Shape 대상을 실례 변수로 삼는다.
RedShapeDecorator는 ShapeDecorator를 구현한 솔리드 클래스입니다.
Decorator Pattern Demo, 우리의 프레젠테이션 클래스는 RedShapeDecorator를 사용하여 Shape 대상을 장식합니다.
단계 1
인터페이스를 만듭니다.
Shape.java

public interface Shape {
  void draw();
}
 

단계 2
인터페이스를 실현하는 실체 클래스를 만듭니다.
Rectangle.java

public class Rectangle implements Shape {
 
  @Override
  public void draw() {
   System.out.println("Shape: Rectangle");
  }
}
Circle.java

public class Circle implements Shape {
 
  @Override
  public void draw() {
   System.out.println("Shape: Circle");
  }
}
단계 3
Shape 인터페이스를 구현하는 추상적인 장식 클래스를 만듭니다.
ShapeDecorator.java

public abstract class ShapeDecorator implements Shape {
  protected Shape decoratedShape;
 
  public ShapeDecorator(Shape decoratedShape){
   this.decoratedShape = decoratedShape;
  }
 
  public void draw(){
   decoratedShape.draw();
  }  
}
 

단계 4
ShapeDecorator 클래스에서 확장된 솔리드 장식 클래스를 만듭니다.
RedShapeDecorator.java

public class RedShapeDecorator extends ShapeDecorator {
 
  public RedShapeDecorator(Shape decoratedShape) {
   super(decoratedShape);    
  }
 
  @Override
  public void draw() {
   decoratedShape.draw();     
   setRedBorder(decoratedShape);
  }
 
  private void setRedBorder(Shape decoratedShape){
   System.out.println("Border Color: Red");
  }
}
단계 5
RedShapeDecorator를 사용하여 Shape 객체를 장식합니다.
DecoratorPatternDemo.java

public class DecoratorPatternDemo {
  public static void main(String[] args) {
 
   Shape circle = new Circle();
 
   Shape redCircle = new RedShapeDecorator(new Circle());
 
   Shape redRectangle = new RedShapeDecorator(new Rectangle());
   System.out.println("Circle with normal border");
   circle.draw();
 
   System.out.println("
Circle of red border"); redCircle.draw(); System.out.println("
Rectangle of red border"); redRectangle.draw(); } }
단계 6
출력을 검증합니다.

Circle with normal border
Shape: Circle

Circle of red border
Shape: Circle
Border Color: Red

Rectangle of red border
Shape: Rectangle
Border Color: Red
 
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기