java 디자인 모델 시리즈의 장식자 모델
동적으로 대상에 추가 직책을 추가합니다.기능을 추가하는 데 있어서, Decorator 모드는 하위 클래스를 생성하는 것보다 더욱 유연하다.
구조
Component: 동적으로 역할을 추가할 수 있는 객체 인터페이스를 정의합니다.
interface Component {
public void operation();
}
ConcreteComponent : Component 。
class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println(" ");
}
}
Decorator: 추상적인 클래스를 장식하고 Component를 계승하며 외부 클래스에서 Component 클래스의 기능을 확장하지만 Component에 있어 Decorator의 존재를 알 필요가 없다.
class Decorator implements Component {
// Component , Component
protected Component component;
//
public Decorator(Component component) {
this.component = component;
}
@Override
//
public void operation() {
component.operation();
}
}
ConcreteDecorator: 구체적인 장식 대상은 Component에 직책을 추가하는 기능을 합니다.
class ConcreteDecoratorA extends Decorator {
private String addedState = " 1";
public ConcreteDecoratorA(Component component) {
super(component);
}
public void operation() {
super.operation();
System.out.println(" : " + addedState);
}
}
class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
public void operation() {
super.operation();
AddedBehavior();
}
public void AddedBehavior() {
System.out.println(" ");
}
}
테스트 코드
public class DecoratorPattern {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component.operation();
System.out.println("======================================");
Decorator decoratorA = new ConcreteDecoratorA(component);
decoratorA.operation();
System.out.println("======================================");
Decorator decoratorB = new ConcreteDecoratorB(decoratorA);
decoratorB.operation();
}
}
실행 결과
======================================
: 1
======================================
: 1
2. 응용 장면1. 동적이고 투명하게 하나의 대상에 직책을 추가해야 한다. 즉, 다른 대상에 영향을 주지 않는다.
2. 동적으로 하나의 대상에 기능을 추가해야 한다. 이런 기능은 다시 동적으로 취소할 수 있다.
3. 일부 기본 기능의 배열 조합으로 인해 발생하는 매우 대량의 기능을 증가시켜 계승 관계를 비현실적으로 만들어야 한다.
4. 서브클래스를 생성하는 방법으로 확충할 수 없을 때.한 가지 상황은 모든 조합을 지원하기 위해 대량의 하위 클래스가 생겨 하위 클래스의 수가 폭발적으로 증가할 수 있다는 것이다.또 다른 상황은 클래스 정의가 숨겨져 있거나 클래스 정의가 하위 클래스를 생성하는 데 사용할 수 없기 때문일 수도 있습니다.
요점
1. 장식 대상과 실제 대상은 같은 인터페이스를 가진다.이렇게 하면 클라이언트 대상은 실제 대상과 같은 방식으로 장식 대상과 상호작용할 수 있다.
2. 장식 대상은 실제 대상의 인용(reference)을 포함한다.
3. 장식 대상은 클라이언트의 요청을 모두 받아들인다.그것은 이 요청들을 진실한 대상에게 전달한다.
4. 장식 대상은 이러한 요청을 전달하기 전이나 이후에 추가 기능을 추가할 수 있다.이렇게 하면 운행할 때 주어진 대상의 구조를 수정하지 않고 외부에 추가 기능을 추가할 수 있다.대상을 대상으로 하는 디자인에서는 일반적으로 계승을 통해 주어진 클래스에 대한 기능 확장을 실현한다.
이상은 자바 장식자 모델에 대한 소개입니다. 여러분의 학습에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.