Tek başına bir kalıp değil, yeniden canlandırmanız gerektiğini söyleyen bir kod deseni.
Ve oldukça kolay, sadece aynı yöntemde bir deneme bloğundan başka bir şey yazmayan bir kural tanıması bilmek zorundasınız. İlgili kodu birlikte yazmayı iyi bilirseniz, genellikle her bir deneme bloğunu catch bloklarıyla kopyalayıp yapıştırmak ve yeni bir yöntemin içine yapıştırmak ve ardından orijinal bloğu bu yönteme yapılan bir çağrı ile değiştirmek olur.
Bu kural, Robert C. Martin'in 'Temiz Kod' adlı kitabındaki önerisine dayanmaktadır:
'try' anahtar kelimesi bir fonksiyonda mevcutsa, fonksiyondaki ilk kelime olmalı ve catch / finally bloklarından sonra hiçbir şey olmamalıdır.
"Sözde-java" hakkında hızlı bir örnek. Diyelim ki böyle bir şeyimiz var:
try {
FileInputStream is = new FileInputStream(PATH_ONE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_TWO);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_THREE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
}
Sonra her bir deneme yakalayıcısını yeniden düzenleyebiliriz ve bu durumda her bir deneme yakalama bloğu aynı şeyi dener ancak farklı konumlarda (ne kadar uygun: D), yalnızca deneme yakalama bloklarından birini yapıştırarak kopyalamamız gerekir. .
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
Şimdi bunu daha önce olduğu gibi kullanıyoruz.
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
Umarım bu yardımcı olur :)