» ImageProcesssor «(또는 프로젝트에 적합한 이름) 및 구성 객체 ProcessConfiguration을 작성합니다. 필요한 모든 매개 변수를 보유 합니다.
ImageProcessor p = new ImageProcessor();
ProcessConfiguration config = new processConfiguration().setTranslateX(100)
.setTranslateY(100)
.setRotationAngle(45);
p.process(image, config);
이미지 프로세서 내부에서 하나의 mehtod 뒤에 전체 프로세스를 캡슐화합니다. process()
public class ImageProcessor {
public Image process(Image i, ProcessConfiguration c){
Image processedImage=i.getCopy();
shift(processedImage, c);
rotate(processedImage, c);
return processedImage;
}
private void rotate(Image i, ProcessConfiguration c) {
//rotate
}
private void shift(Image i, ProcessConfiguration c) {
//shift
}
}
이 방법은 올바른 순서로 변형 메소드를 호출 shift()
, rotate()
. 각 메소드는 전달 된 ProcessConfiguration 에서 적절한 매개 변수를 가져옵니다. .
public class ProcessConfiguration {
private int translateX;
private int rotationAngle;
public int getRotationAngle() {
return rotationAngle;
}
public ProcessConfiguration setRotationAngle(int rotationAngle){
this.rotationAngle=rotationAngle;
return this;
}
public int getTranslateY() {
return translateY;
}
public ProcessConfiguration setTranslateY(int translateY) {
this.translateY = translateY;
return this;
}
public int getTranslateX() {
return translateX;
}
public ProcessConfiguration setTranslateX(int translateX) {
this.translateX = translateX;
return this;
}
private int translateY;
}
나는 사용했다 유체 인터페이스를
public ProcessConfiguration setRotationAngle(int rotationAngle){
this.rotationAngle=rotationAngle;
return this;
}
위와 같이 깔끔한 초기화가 가능합니다.
필요한 매개 변수를 하나의 객체에 캡슐화하는 명백한 이점. 메소드 서명을 읽을 수있게됩니다.
private void shift(Image i, ProcessConfiguration c)
그것은 관한 이동 이미지 와 상세한 매개 변수를 어떻게 든되는 구성 .
또는 ProcessingPipeline을 만들 수 있습니다 .
public class ProcessingPipeLine {
Image i;
public ProcessingPipeLine(Image i){
this.i=i;
};
public ProcessingPipeLine shift(Coordinates c){
shiftImage(c);
return this;
}
public ProcessingPipeLine rotate(int a){
rotateImage(a);
return this;
}
public Image getResultingImage(){
return i;
}
private void rotateImage(int angle) {
//shift
}
private void shiftImage(Coordinates c) {
//shift
}
}
메소드에 대한 메소드 호출 processImage
은 그러한 파이프 라인을 인스턴스화하고 shift , rotate
public Image processImage(Image i, ProcessConfiguration c){
Image processedImage=i.getCopy();
processedImage=new ProcessingPipeLine(processedImage)
.shift(c.getCoordinates())
.rotate(c.getRotationAngle())
.getResultingImage();
return processedImage;
}