디자인 모델 총화 의 장식 모델 (Decorator)
장식 모드 (Decorator) 는 장 식 된 하위 클래스 의 인 스 턴 스 를 사용 하여 클 라 이언 트 에서 이 하위 클래스 의 인 스 턴 스 를 장식 류 에 위탁 하 는 것 입 니 다.장식 모드 는 관 계 를 맺 는 대체 방안 이다.
장식 모델 은 클 라 이언 트 에 대한 투명 한 방식 으로 대상 의 기능 을 추 가 했 고 동태 적 으로 대상 에 게 책임 을 추 가 했 습 니 다. 물론 이곳 의 계승 은 정적 입 니 다.
그 중에서 중요 한 지역 에서 장식 대상 과 실제 대상 은 똑 같은 인 터 페 이 스 를 가진다. 그러면 클 라 이언 트 는 실제 대상 과 똑 같은 상호작용 방식 과 장식 대상 과 상호작용 을 할 수 있다. 그리고 장식 대상 은 클 라 이언 트 에서 받 은 모든 요 구 를 실제 대상 에 게 전달 한 다음 에 클 라 이언 트 에 게 반환 할 수 있다.이렇게 장식 대상 은 리 트 윗 전이 나 그 후에 추가 기능 을 추가 하여 실제 대상 에 대한 조작 에 영향 을 주지 않 을 수 있다. 이렇게 하면 원래 의 유형 을 바 꾸 지 않 는 토대 에서 원래 의 이러한 추가 기능 에 대한 실현 을 실현 하고 프로그램의 재 활용 성 을 강화 할 수 있다.
또한 장식 모델 이 계승 보다 좋 은 점 은 장식 모델 이 이미 존재 하 는 유형 을 동태 적 으로 조합 하여 원 하 는 기능 을 실현 할 수 있 고 계승 은 정태 적 인 실현 이 므 로 원래 의 실현 을 바 꿀 수 없다 는 것 이다. 만약 에 더 많은 기능 을 추가 하려 면 더 많은 파생 류 를 추가 해서 실현 해 야 한다.
다음은 직원 가공 화 를 예 로 들 어 장식 자 모델 을 실현 한다.
추상 구성 요소 Work. java
package decorator;
public abstract class Work {
public abstract void painting();
}
장식 자 1Work. java
package decorator;
public class WorkerOne extends Work {
@Override
public void painting() {
System.out.println("1 ");
}
}
장식 자 3Work. javapackage decorator;
public class WorkerThree extends Work {
//
private Work work;
public WorkerThree(Work work) {
this.work = work;
}
private WorkerThree() {}
@Override
public void painting() {
System.out.println("3 。");
//
work.painting();
//
System.out.println("3 。");
}
}
장식 자 2Work. javapackage decorator;
public class WorkerTwo extends Work {
//
private Work work;
public WorkerTwo(Work work) {
this.work = work;
}
private WorkerTwo() {}
@Override
public void painting() {
System.out.println("2 。");
//
work.painting();
//
System.out.println("2 。");
}
}
테스트 클래스package decorator;
public class Test {
public static void main(String[] args) {
System.out.println("***** *****");
WorkerOne workerOne = new WorkerOne();
workerOne.painting();
System.out.println("***** *****");
WorkerTwo workerTwo = new WorkerTwo(workerOne);
workerTwo.painting();
System.out.println("**** *****");
WorkerThree workerThree = new WorkerThree(workerTwo);
workerThree.painting();
}
}
장식 자 모드 적용 장소:1. , , 。
2. , , , , 。
장식 모델 모델 은 대리 모델 의 특수 한 응용 이 라 고 할 수 있 고 심지어 그들의 구조 적 으로 일치 하 다 고 볼 수 있다.다만 이들 의 관심 사 는 지역 이 다 르 고 대리 모델 은 대상 방법의 예비 처리 와 사후 처리, 장식 모델 은 대상 방법의 '강화' (주의: '증가' 가 아니 라) 또는 '약화' 에 관심 을 가진다.
책임 체인 모델 은 여러 개의 처리 대상 을 하나의 체인 모양 으로 모 으 고 처리 대상 은 체인 헤드 에 직접 맡 기 며 처리 가 완료 되 거나 마지막 처리 대상 에 도착 할 때 까지 체인 에서 순서대로 전달 된다.책임 체인 모드 는 요청 과 처 리 를 분리 할 수 있 지만 체인 이 너무 긴 시간 동안 의 성능 문제 와 체인 중의 노드 수량 문 제 를 주의해 야 한다.
전략 모델 은 대상 의 방법 행 위 를 동적 으로 바 꾸 는 경 로 를 제공 합 니 다.이 는 알고리즘 을 패키지 하고 대상 에서 Setter (또는 구조 함수) 를 사용 하여 구체 적 인 알고리즘 대상 을 받 은 다음 대상 방법 이 호출 될 때 받 은 구체 적 인 알고리즘 을 실행 하 는 것 을 실현 합 니 다.
javaIO 는 전형 적 인 장식 자의 예 입 니 다. 우 리 는 직접 사용 할 수 있 습 니 다.
입력 스 트림 문 자 를 소문 자 LowerCase InputStream. 자바 로 변경 합 니 다.
package javaIO;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
public class LowerCaseInputStream extends FilterInputStream {
protected LowerCaseInputStream(InputStream in) {
super(in);
}
public int read() throws IOException{
int i = super.read();
return i==-1?i:Character.toLowerCase(i);
}
public int read(byte[] b,int off,int len) throws IOException{
int result = super.read(b, off, len);
for(int i=off;i
package javaIO;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) throws IOException {
int c;
try {
InputStream in = new LowerCaseInputStream(
new BufferedInputStream(
new FileInputStream("test.txt")));
while((c=in.read())>=0){
System.out.print((char)c);
}
// byte[] b=new byte[3];
// while((c=in.read(b,0,3))>=0){
// for(int i=0;i<3;i++){
// System.out.print((char)b[i]);
// }
// }
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.