데코레이터 패턴을 사용하면 구조를 변경하지 않고 기존 객체에 새로운 기능을 추가 할 수 있습니다. 이 유형의 설계 패턴은 기존 클래스의 패키지 인 구조 패턴에 속합니다.
이 패턴은 원래 클래스를 마무리하기 위해 장식 클래스를 생성하고 클래스 메소드 서명의 무결성을 유지하면서 추가 기능을 제공합니다.
우리는 다음 예제를 통해 데코레이터 모드의 사용을 보여줍니다. 그 중에서도 모양 클래스를 변경하지 않고 다른 색상의 모양을 장식합니다.
성취하다
모양 인터페이스와 모양 인터페이스를 구현하는 엔티티 클래스를 생성합니다. 그런 다음 모양 인터페이스를 구현하고 모양 객체를 인스턴스 변수로 사용하는 추상적 인 장식 클래스 Shapedecorator를 만듭니다.
redghapedecorator는 Shapedecorator를 구현하는 엔티티 클래스입니다.
Decoratorpatterndemo, 데모 클래스는 Redshapedecorator를 사용하여 모양 객체를 장식합니다.
1 단계
인터페이스를 만듭니다.
shape.java
공개 인터페이스 모양 {void draw ();}2 단계
인터페이스를 구현하는 엔티티 클래스를 만듭니다.
사각형. 자바
공개 클래스 사각형 구현 {@override public void draw () {System.out.println ( "shape : rectangle"); }} circle.javapublic class circle 구현 모양 {@override public void draw () {System.out.println ( "shape : circle"); }}3 단계
모양 인터페이스를 구현하는 추상적 인 장식 클래스를 만듭니다.
Shapedecorator.java
공개 초록 클래스 Shapedecorator는 모양 {보호 된 모양 DecoratedShape; public shapedecorator (Shape DecoratedShape) {this.DecoratedShape = DecoratedShape; } public void draw () {decoratedShape.Draw (); }}4 단계
Shapedecorator 클래스에서 확장되는 엔티티 장식 클래스를 만듭니다.
redghapedecorator.java
공개 클래스 레드 쉐이프 코터 확장 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 단계
레드 쉐이프 코터를 사용하여 모양 객체를 장식하십시오.
Decoratorpatterndemo.java
public class decoratorpatterndemo {public static void main (String [] args) {shape circle = new Circle (); 모양 redcircle = new redghapedecorator (new Circle ()); Shape redrectangle = new redghapedecorator (new Rectangle ()); System.out.println ( "정상 테두리가있는 원"); Circle.Draw (); System.out.println ( "/ncircle of red border"); redcircle.draw (); System.out.println ( "/nrectangle of red border"); redrectangle.draw (); }}6 단계
출력을 확인하십시오.
정상적인 Bordershape와 함께 원 : Red Bordershape의 Circleclecle : Circleborder Color : Red rectangle of Red BordersHape : ERCTANGLEBORDER COLOR : Red
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!