मैं एक " ImageProcesssor « (या जो भी नाम आपकी परियोजना के अनुरूप हो) और एक कॉन्फ़िगरेशन ऑब्जेक्ट ProcessConfiguration बनाऊंगा , जो सभी आवश्यक पैरामीटर रखता है।
ImageProcessor p = new ImageProcessor();
ProcessConfiguration config = new processConfiguration().setTranslateX(100)
.setTranslateY(100)
.setRotationAngle(45);
p.process(image, config);
Imageprocessor के अंदर आप एक 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)
यह एक छवि को स्थानांतरित करने के बारे में है और विस्तृत पैरामीटर किसी तरह कॉन्फ़िगर किए गए हैं ।
वैकल्पिक रूप से, आप एक प्रोसेसिंगपिपलाइन बना सकते हैं :
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
इस तरह के एक पाइपलाइन को तुरंत रोक देगा और पारदर्शी बना देगा कि क्या और किस क्रम में किया जाता है: शिफ्ट , घुमाएं
public Image processImage(Image i, ProcessConfiguration c){
Image processedImage=i.getCopy();
processedImage=new ProcessingPipeLine(processedImage)
.shift(c.getCoordinates())
.rotate(c.getRotationAngle())
.getResultingImage();
return processedImage;
}