데코레이터 모드는 무엇입니까?
객체에 추가적인 책임을 동적으로 추가하십시오. 함수 추가 측면에서, 데코레이터 모드는 서브 클래스를 생성하는 것보다 유연합니다.
1. 구조
구성 요소 : 이러한 객체에 책임을 동적으로 추가 할 수있는 객체 인터페이스를 정의합니다.
인터페이스 구성 요소 {public void erforting ();} ConcreteComponent : 구성 요소에 의해 정의 된 인터페이스를 구현합니다. Class ConcreteComponent는 구성 요소를 구현 {@override public void operation () {System.out.println ( "초기 동작"); }} 데코레이터 : 초록 클래스를 장식하고, 구성 요소를 상속하고, 외부 클래스에서 구성 요소 클래스의 함수를 확장하지만 구성 요소의 경우 데코레이터의 존재를 알 필요가 없습니다.
클래스 데코레이터는 구성 요소를 구현합니다. {// 구성 요소 개체를 유지하고 구성 요소 보호 구성 요소 구성 요소와 집계 관계를 형성합니다. // 객체를 추가하여 추가로 수정 된 공개 데코레이터 (구성 요소 구성 요소) {this.component = 구성 요소; } @override // 원래 메소드를 호출하여 공개 공개 void operation () {component.operation (); }} CONCRETEDECORATOR : 특정 장식 객체는 구성 요소에 책임을 추가하는 기능을 재생합니다.
Class ConcretedeCoratora는 Decorator {private String addstate = "New Property 1"; Public ConcreteDecoratora (구성 요소 구성 요소) {Super (구성 요소); } public void operation () {super.operation (); System.out.println ( "추가 속성 :" + 첨가물); }} Class ConcretEdeCoratorb Extends Decorator {public concretedecoratorb (구성 요소 구성 요소) {super (구성 요소); } public void operation () {super.operation (); 추가 behavior (); } public void addsBehavior () {System.out.println ( "동작 추가"); }} 테스트 코드
public class decoratorpattern {public static void main (String [] args) {구성 요소 구성 요소 = new ConcreteComponent (); component.operation (); System.out.println ( "=========================================================================================================== ============================================================== ================================================================= ============================================================== ============================================================== ============================================================== ================================================================= System.out.println ( "========================================================================================= }} 실행 결과
초기의 행동 ============================================================ =========================================================================== =========================================================================== ===========================================================================
2. 응용 프로그램 시나리오
1. 하나의 객체에 동적이고 투명하게 책임을 추가해야합니다. 즉, 다른 객체에 영향을 미치지 않습니다.
2. 객체에 함수를 동적으로 추가해야하며 이러한 기능은 동적으로 취소 할 수 있습니다.
3. 일부 기본 기능의 배열과 조합에 의해 생성 된 많은 기능을 추가하여 상속 관계가 비현실적이되도록해야합니다.
4. 서브 클래스를 생성하는 방법이 확장에 사용될 수없는 경우. 한 가지 시나리오는 다수의 독립적 인 확장증이있을 수 있으며, 이는 각 조합을 지원하기 위해 많은 수의 서브 클래스를 생성하여 서브 클래스의 수가 폭발하게된다는 것입니다. 다른 경우는 클래스 정의가 숨겨져 있거나 클래스 정의를 서브 클래스를 생성하는 데 사용할 수 없기 때문일 수 있습니다.
3. 키 포인트
1. 장식적인 물체와 실제 물체는 동일한 인터페이스를 가지고 있습니다. 이런 식으로 클라이언트 객체는 실제 객체와 같은 방식으로 장식 객체와 상호 작용할 수 있습니다.
2. 장식적인 물체에는 실제 물체에 대한 참조가 포함되어 있습니다.
3. 장식 객체는 클라이언트의 모든 요청을 받아들입니다. 이 요청을 실제 객체로 전달합니다.
4. 장식 물체는 이러한 요청을 전달하기 전 또는 후에 추가 기능을 추가 할 수 있습니다. 이를 통해 런타임에 주어진 객체의 구조를 수정하지 않고 외부에서 추가 기능을 추가 할 수 있습니다. 객체 지향 설계에서, 주어진 클래스에 대한 기능 확장은 일반적으로 상속을 통해 달성됩니다.
위의 것은 Java Decorator 모드에 대한 관련 내용에 대한 소개입니다. 모든 사람의 학습에 도움이되기를 바랍니다.