장식
장식 (데코레이터 패턴)은 그 구조를 변경하지 않고 기존 개체에 새로운 기능을 추가 할 수 있습니다. 디자인 패턴이 유형은 래퍼 클래스로 사용 가능 구조 모델에 속한다.
이 패턴은 부가적인 기능성을 제공하는 전제 서명의 무결성을 유지하는 기존 클래스와 클래스 방법을 포장하는 데 사용 장식을 생성한다.
우리는 데코레이터 패턴을 보여주기 위해 다음 예를 사용합니다. 그 중에서도, 우리는 클래스의 모양을 변경하지 않고, 다른 색상의 장식을 형성 할 것이다.
소개
의도 : 동적 객체에 대한 몇 가지 추가 책임을 추가 할 수 있습니다.향상된 기능, 데코레이터 패턴은보다 유연한 서브 클래스 비교했다.
주로 해결 : 일반적으로, 우리는 종종 인해 정적 클래스 상속 기능의 도입 달성하도록 클래스 상속을 확장하기 위해 사용 증가와 기능 확장 상기 서브 팽창된다.
사용하는 경우 : 당신은 많은 하위 범주 확장 클래스의 경우 증가를 원하지 않는다.
해결 방법 : 데코레이터 패턴을 계승하면서, 특정 기능의 책임을 분할.
키 코드 : 1, 추상 역할과 구성 요소클래스 역할을해야하지 특정 구현입니다. 2, 수정 된 클래스 참조 및 상속 구성 요소 클래스는, 특정 확장 클래스는 부모 클래스의 메소드를 오버라이드 (override).
적용 예 : 1, 그는 "성전"가되는 원숭이 왕 (72)의 변화, 그는 단순히 원숭이이었다, 그러나 그는 성전 기능을 가지고 있습니다.이 관계없이 픽처 프레임의 벽에 매달려있을 수 있지만, 일반적으로 액자가, 프레임 실제로 벽에 매달려 하였다. 벽에 매달려 전에 그림은 프레임 집에 장착, 유리 커버 할 수 후 페인팅, 유리 및 프레임이 개체로 형성.
장점 : 장식 및 장식, 독립적으로 개발 될 수 서로, 장식 패턴에 연결되지 않은 것은 상속의 다른 모드, 장식 패턴 동적 기능을 구현하는 클래스를 확장 할 수 있습니다.
단점 : 좀 더 복잡한 다층 장식.
사용 시나리오 : 1, 클래스의 기능을 확장.이 동적 확대 기능은 동적 폐기.
참고 : 상속을 대체 할 수 있습니다.
실현
우리는 엔티티 클래스모양 인터페이스의모양 인터페이스와 구현을 작성합니다. 그 다음 우리는 그것의 인스턴스 변수로 추상 장식ShapeDecorator 모양인터페이스의 실현과Shape객체를 생성합니다.
RedShapeDecorator는엔티티 클래스의ShapeDecorator을달성하는것입니다.
DecoratorPatternDemo는RedShapeDecorator를 사용하여 우리의 데모 클래스는Shape객체를 장식합니다.
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 단계
출력을 확인합니다.
정상 테두리 원 모양 : 원 빨간색 테두리의 원 모양 : 원 테두리 색상 : 레드 빨간색 테두리의 직사각형 모양 : 직사각형 테두리 색상 : 레드