Latest web development tutorials

장식

장식 (데코레이터 패턴)은 그 구조를 변경하지 않고 기존 개체에 새로운 기능을 추가 할 수 있습니다. 디자인 패턴이 유형은 래퍼 클래스로 사용 가능 구조 모델에 속한다.

이 패턴은 부가적인 기능성을 제공하는 전제 서명의 무결성을 유지하는 기존 클래스와 클래스 방법을 포장하는 데 사용 장식을 생성한다.

우리는 데코레이터 패턴을 보여주기 위해 다음 예를 사용합니다. 그 중에서도, 우리는 클래스의 모양을 변경하지 않고, 다른 색상의 장식을 형성 할 것이다.

소개

의도 : 동적 객체에 대한 몇 가지 추가 책임을 추가 할 수 있습니다.향상된 기능, 데코레이터 패턴은보다 유연한 서브 클래스 비교했다.

주로 해결 : 일반적으로, 우리는 종종 인해 정적 클래스 상속 기능의 도입 달성하도록 클래스 상속을 확장하기 위해 사용 증가와 기능 확장 상기 서브 팽창된다.

사용하는 경우 : 당신은 많은 하위 범주 확장 클래스의 경우 증가를 원하지 않는다.

해결 방법 : 데코레이터 패턴을 계승하면서, 특정 기능의 책임을 분할.

키 코드 : 1, 추상 역할과 구성 요소클래스 역할을해야하지 특정 구현입니다. 2, 수정 된 클래스 참조 및 상속 구성 요소 클래스는, 특정 확장 클래스는 부모 클래스의 메소드를 오버라이드 (override).

적용 예 : 1, 그는 "성전"가되는 원숭이 왕 (72)의 변화, 그는 단순히 원숭이이었다, 그러나 그는 성전 기능을 가지고 있습니다.이 관계없이 픽처 프레임의 벽에 매달려있을 수 있지만, 일반적으로 액자가, 프레임 실제로 벽에 매달려 하였다. 벽에 매달려 전에 그림은 프레임 집에 장착, 유리 커버 할 수 후 페인팅, 유리 및 프레임이 개체로 형성.

장점 : 장식 및 장식, 독립적으로 개발 될 수 서로, 장식 패턴에 연결되지 않은 것은 상속의 다른 모드, 장식 패턴 동적 기능을 구현하는 클래스를 확장 할 수 있습니다.

단점 : 좀 더 복잡한 다층 장식.

사용 시나리오 : 1, 클래스의 기능을 확장.이 동적 확대 기능은 동적 폐기.

참고 : 상속을 대체 할 수 있습니다.

실현

우리는 엔티티 클래스모양 인터페이스의모양 인터페이스와 구현을 작성합니다. 그 다음 우리는 그것의 인스턴스 변수로 추상 장식ShapeDecorator 모양인터페이스의 실현과Shape객체를 생성합니다.

RedShapeDecorator는엔티티 클래스의ShapeDecorator을달성하는것입니다.

DecoratorPatternDemo는RedShapeDecorator를 사용하여 우리의 데모 클래스는Shape객체를 장식합니다.

데코레이터 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

Shape.java

공용 인터페이스 Shape {
   무효 무승부 ();
}

2 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

Rectangle.java

공용 클래스 직사각형 모양을 {구현

   @Override
   공공 무효 무승부 () {
      에서 System.out.println ( "모양 : 사각형");
   }
}

Circle.java

공용 클래스 서클 모양을 {구현

   @Override
   공공 무효 무승부 () {
      에서 System.out.println ( "모양 : 원");
   }
}

3 단계

추상 장식모양의인터페이스를 달성 만듭니다.

ShapeDecorator.java

공개 추상 클래스 ShapeDecorator는 모양을 {구현
   보호 된 모양 decoratedShape;

   공공 ShapeDecorator (decoratedShape 모양) {
      this.decoratedShape = decoratedShape;
   }

   공공 무효 무승부 () {
      decoratedShape.draw ();
   }	
}

4 단계

확장 된 개체 장식ShapeDecorator 클래스를만듭니다.

RedShapeDecorator.java

공용 클래스 RedShapeDecorator는 ShapeDecorator를 {확장

   공공 RedShapeDecorator (decoratedShape 모양) {
      슈퍼 (decoratedShape);		
   }

   @Override
   공공 무효 무승부 () {
      decoratedShape.draw ();	       
      setRedBorder (decoratedShape);
   }

   개인 무효 setRedBorder (decoratedShape 모양) {
      에서 System.out.println ( "테두리 색상 : 레드");
   }
}

5 단계

RedShapeDecorator는Shape 객체를 장식하는 데 사용합니다.

DecoratorPatternDemo.java

공용 클래스 DecoratorPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {

      () 원 = 새로운 원형 모양;

      redCircle = 새로운 RedShapeDecorator 모양 (새 원 ());

      redRectangle = 새로운 RedShapeDecorator 모양 (새로운 Rectangle ());
      에서 System.out.println ( "정상적인 테두리 원");
      circle.draw ();

      에서 System.out.println는 ( "빨간색 테두리의 nCircle을 \");
      redCircle.draw ();

      에서 System.out.println ( "빨간색 테두리의 \ nRectangle");
      redRectangle.draw ();
   }
}

6 단계

출력을 확인합니다.

정상 테두리 원
모양 : 원

빨간색 테두리의 원
모양 : 원
테두리 색상 : 레드

빨간색 테두리의 직사각형
모양 : 직사각형
테두리 색상 : 레드