데코레이터는 종종 "장식"으로 번역됩니다. 화가 (데코레이터)로 번역하는 것이 더 생생한 것으로 생각합니다. 이 두 엔티티는 데코레이터 모드에서 필요합니다.
데코레이터 정의 : 벽을 칠하는 것과 같은 물체에 몇 가지 추가 책임을 동적으로 추가합니다. 데코레이터 모드 사용은 기능적 확장을 달성하기 위해 서브 클래스 생성을 사용하는 것보다 유연합니다.
데코레이터를 사용하는 이유
우리는 일반적으로 기능 확장을 달성 할 수 있습니다. 많은 유형의 기능이 확장되어야합니다. 이러한 확장 기능은 컴파일 시간에 결정되며 정적입니다.
데코레이터를 사용하는 이유는 이러한 기능을 사용자가 동적으로 결정해야하기 때문입니다. Decorator는 "플러그 앤 플레이"메소드를 제공하여 런타임 중 어떤 기능을 추가 할시기를 결정합니다.
장식 모드를 사용하는 방법
어댑터에서 파일 드라이브의 예를 들어, 어댑터에는이 두 클래스를 사용하는 방법을 보여줍니다. 구덩이와 같은 구덩이는 더미에 못 박히고 두 개의 관련된 클래스를 사용하는 방법을 신경 쓰지 않습니다.
먼저 인터페이스를 만들어 봅시다 :
코드 사본은 다음과 같습니다.
공개 인터페이스 작업 {
public void insert ();
}
인터페이스 작업에는 특정 구현이 있습니다.이 두 가지 차이점은 데코레이터에 중요하지 않습니다. 예를 들어 정사각형 더미를 삽입합시다.
코드 사본은 다음과 같습니다.
공공 수업 squarepeg emplements work {
public void insert () {
System.out.println ( "제곱 파일 삽입");
}
}
이제 응용 프로그램이 있습니다. 파일이 구멍을 뚫기 전에 더미가 구동되면 목재 보드가 더스에 걸쳐 있으며, 예를 들어 조정이 추가 될 수 있습니다 파일이 구동 된 후 랙을 못 박는 데 필요할 수 있습니다 (은유 만).
그런 다음 사각형 파일 스쿼그가 장식 인 (페인트로 페인트) 인 데코레이터 모드를 사용하고 장식용에 "페인트"를 페인트해야 하며이 페인트는 추가 기능입니다.
코드 사본은 다음과 같습니다.
공개 클래스 데코레이터는 작업 {
개인 작업 작업;
// 추가 기능 이이 목록에 포장되어 있습니다
private arraylist other = new ArrayList ();
// 생성자의 결합 된 새 방법을 사용하여 작업 객체를 소개합니다.
공개 데코레이터 (작업 작업) {
this.work = 작업;
다른 .add ( "구멍을 파다");
다른 .add ( "네일 보드");
}
public void insert () {
newMethod ();
}
// 새 메소드에서 삽입하기 전에 다른 메소드를 추가하고 여기에 주문은 사용자가 유연하게 지정합니다.
public void newMethod () {
기타 방법 ();
work.insert ();
}
public void OtherMethod () {
Listiterator Listiterator = Others.listiterator ();
while (listiterator.hasnext ()) {
System.out.println (((String) (listiterator.next ()) + "진행 중");
}
}
}
위의 예에서, 우리는 파일 삽입물 앞에서 파기 구멍과 못을 박는 보드를 평가했습니다.
좋아, 데코레이터 모드가 나왔는데, 그것을 호출하는 방법을 보자.
코드 사본은 다음과 같습니다.
작업 squarepeg = new squarepeg ();
작업 데코레이터 = 새로운 데코레이터 (squarepeg);
Decorator.insert ();
데코레이터 모드가 여기에서 완료됩니다.
당신이주의를 기울이면, 위의 통화는 파일을 읽을 때 읽은 통화와 유사하다는 것을 알게 될 것입니다.
코드 사본은 다음과 같습니다.
Filereader fr = New Filereader (filename);
bufferedReader br = 새로운 버퍼드 리더 (FR);
실제로 Java의 I/O API는 데코레이터를 사용하여 구현됩니다.
Jive의 데코레이터 구현
포럼 시스템에서는 "xxx를 사용한 다운"과 같은 일부 특수 문자가 포럼에 나타날 수 없으므로 이러한 "반동적 인"글꼴을 필터링해야합니다. 그들이 나타나거나 높은 밝기로 나타나게하지 마십시오.
IBM Java 열에서 Jive에 대해 구체적으로 이야기하는 기사에서, Jive의 ForummessageFilter.java는 실제로이 프로그램이 Decorator를 사용하지는 않지만 추가 필터링 기능을 특수 포럼 용으로 설계 할 수 있다고 언급했습니다. 그런 다음 ForumMessageFilter를 데코레이터 모드로 재구성 할 수 있습니다.
따라서, 우리가 그것이 실제로 데코레이터 모드인지, 실제로 데코레이터 모드를 사용하는지 여부를 결정할 때 데코레이터 모드와 관련된 역할 (장식 및 데코레이터)의 정의를 파악해야합니다.