Intent: 객체에 몇 가지 추가 책임을 동적으로 추가합니다. 기능 추가 측면에서 장식 모드는 하위 클래스를 생성하는 것보다 더 유연합니다.
주요 솔루션: 상속은 클래스에 정적 기능을 도입하고 확장 기능이 증가함에 따라 하위 클래스가 점점 더 확장되기 때문에 상속을 사용하는 경우가 많습니다.
사용 방법: 많은 하위 클래스를 추가하지 않고 확장합니다.
해결 방법: 특정 기능적 책임을 나누고 데코레이터 패턴을 상속합니다.
키 코드:
1. Component 클래스는 추상적인 역할을 수행하므로 구체적으로 구현하면 안 됩니다.
2. 클래스 참조를 수정하고 Component 클래스를 상속하며, 구체적으로 클래스를 확장하여 상위 클래스 메서드를 재정의합니다.
사용 시나리오:
1. 클래스의 기능을 확장합니다.
2. 동적으로 기능을 추가하고 동적으로 취소합니다.
Shape 인터페이스와 Shape 인터페이스를 구현하는 엔터티 클래스를 만듭니다. 그런 다음 Shape 인터페이스를 구현하는 추상 장식 클래스 ShapeDecorator를 만들고 Shape 개체를 인스턴스 변수로 사용합니다. RedShapeDecorator는 ShapeDecorator를 구현하는 엔터티 클래스입니다. DecoratorPatternDemo 클래스는 RedShapeDecorator를 사용하여 Shape 객체를 장식합니다.
1단계:
public interface Shape{ void draw(); }
2단계:
public class Rectangle implements Shape{ @Override public ovid draw(){ System.out.println("draw Rectangle"); } }
public class Cricle implements Shape{ @Override public ovid draw(){ System.out.println("draw Circle"); } }
3단계:
public abstract class ShapeDecorator implements Shape{ private Shape shape; // 持有一个 Shape 对象 public ShapeDecorator(Shape shape){ this.shape = shape; } public void draw(){ shape.draw();// TODO 根据传进来的具体 Shape 对象,调用对应的 draw 方法 } }
4단계:
public class RedShapeDecorator extends ShapeDecorator{ public RedShapeDecorator(Shape shape){ super(shape); } @Override public void draw(){ shape.draw(); setRedBorder(shape); } public void setRedBorder(Shape shape){ System.out.println("Border Color: Red"); } }
5단계
public class DecoratorPatterndDemo{ public static void main(String args[]){ //TODO 面向抽象层编程 // 普通的Circle Shape circle = new Circle(); System.out.println("Circle with normal Border"); circle.darw(); // 红色边界的 Circle ShapeDecorator redCircle = new RedShapeDecorator(new Circle); System.out.println("Circle of red Border"); redCircle.draw(); // 红色边界的 Rectangle ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangel): System.out.println("Rectangle of red Border"); redRectangle.draw(); } }
장점: 수업을 꾸미고 수업은 독립적으로 발전할 수 있으며, 장식 모드는 상속에 대한 대체 모드입니다. 장식 모드는 구현 클래스의 기능을 동적으로 확장할 수 있습니다.
단점: 다층 장식이 더 복잡합니다.
위 내용은 Java 구조 디자인 패턴의 장식 모드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!