[Java 성능 최적화 노트] 06 데코레이터 모드
장식자 모드는 성능 부품과 기능 부품을 효과적으로 분리하여 모듈의 유지보수성을 향상시키고 모듈의 복용성을 증가시킬 수 있다.
장식자(
Decorator
와 피장식자(ConcreteComponent
는 같은 인터페이스Component
를 가지고 있다.피장식자는 통상적으로 시스템의 핵심 부품으로 특정한 기능 목표를 완성한다.한편, 장식자는 피장식자의 방법 전후에 특정한 전치 처리나 후치 처리를 추가하여 피장식자의 기능을 강화할 수 있다.다음은 예를 들어 설명합니다.
필요: 컨텐트를 HTML로 게시해야 합니다.
public interface IPacketCreator {
public String handleContent();
}
PacketCreator
패킷을 반환하는 데 사용되는 핵심 데이터:public class PacketBodyCreator implements IPacketCreator {
@Override
public String handleContent() {
return "Content of Body";
}
}
PacketDecorator
구성 요소를 유지보수하는데 업무 논리를 실현하지 않고 하위 클래스에 의뢰 대상만 제공한다.public abstract class PacketDecorator implements IPacketCreator {
IPacketCreator component;
public PacketDecorator(IPacketCreator creator) {
this.component = creator;
}
}
다음은 구체적인 구성 요소의 실현이다.
public class PacketHtmlHeaderCreator extends PacketDecorator {
public PacketHtmlHeaderCreator(IPacketCreator creator) {
super(creator);
}
@Override
public String handleContent() {
StringBuilder sb = new StringBuilder();
sb.append("");
sb.append("");
sb.append(component.handleContent());
sb.append("");
sb.append("");
return sb.toString();
}
}
public class PacketHTTPHeaderCreator extends PacketDecorator{
public PacketHTTPHeaderCreator(IPacketCreator creator) {
super(creator);
}
@Override
public String handleContent() {
StringBuffer sb = new StringBuffer();
sb.append("CacheControl:no-cache
");
sb.append("Date:Sun,21June201515:58:57GMT
");
sb.append(component.handleContent());
return sb.toString();
}
}
테스트:
public class DecoratorTester {
public static void main(String[] args) {
IPacketCreator pc = new PacketHTTPHeaderCreator(
new PacketHtmlHeaderCreator(new PacketBodyCreator()));
System.out.println(pc.handleContent());
}
}
예에서 알 수 있듯이 구성 요소의 각종 기능은 마지막에 최종 pc에 층층이 박혀 있다.
사실 장식자 모델은 일상적인 사용에서도 흔히 볼 수 있다. 예를 들어 JDK의
IO Stream
:DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("/data/file.txt")));
2015-06-21
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.