java 장식 모드(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");
}
}
단계 3Shape 인터페이스를 구현하는 추상적인 장식 클래스를 만듭니다.
ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
단계 4ShapeDecorator 클래스에서 확장된 솔리드 장식 클래스를 만듭니다.
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");
}
}
단계 5RedShapeDecorator를 사용하여 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
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.