beni anlıyorum emin olalım bkz tarihinde Guava Kütüphane kullanabilirsiniz Alınan. public void dataReceived(Data d)
ve public void onError(String reason)
: Herşeyden
Birincisi, vb if1
, if2
, sizin iki temel yöntemlerle hepsi aynı arayüz vardı iyi olabilirlerdi. Bununla birlikte, alıcılarınızın bir List
veya Collection
'unu fetchData
'a geçirebilir ve koleksiyon üzerinde yineleyebilir ve her birinde dataReceived(d)
'u arayabilirsiniz.
Eğer herhangi bir sebepten ötürü işe yaramazsa, fetchData
için benzer bir arabirime sokmak için bir adaptör kullanmayı deneyeceğim. Örneğin: bir yerde bununla Şimdi
public interface DataReceiver extends ErrorInterface {
public void dataReceived(Data d);
//or just scrap the ErrorInterface all together and make these into 1 interface
}
public class AbstractIFAdapter<T extends ErrorInterface> implements DataReceiver {
private T target;
public AbstractIFAdapter(T target) { this.target = target);
public void onError(String reason) { target.onError(reason); }
protected T getTarget() { return target; }
}
public class IF1Adapter extends AbstractIFAdapter<IF1> {
public IF1Adapter(IF1 target) { super(target); }
public dataReceived(Data d) { getTarget().dataReceived1(d); }
}
public class IF2Adapter extends AbstractIFAdapter<IF2> {
public IF2Adapter(IF2 target) { super(target); }
public dataReceived(Data d) { getTarget().dataReceived2(d); }
}
, biz böyle bir şey yapabilirsiniz:
böyle ziyaretçiler ya da belki bir zincir olarak tam ihtiyaçlarına bağlı olarak geçerli olabilecek diğer desenler vardır
List<DataReceiver> dataReceivers = new ArrayList<DataReceiver>();
dataReceivers.add(new IF1Adapter(someIf1Implementation));
dataReceivers.add(new IF2Adapter(someIf2Implementation));
fetchData(dataReceivers);
public void fetchData(Collection<DataReceiver> receivers) {
try {
Data d = getSomeData();
for (DataReceiver dr : receivers) {
dr.dataReceived(d);
}
}
catch (Exception e) {
for (DataReceiver dr : receivers) {
dr.onError(e.getMessage());
}
}
}
-de-sorumluluk türü desen alıcılar zincirleme bir liste türü yapı içinde birbirine zincirleme ve her biri bir yinelemeli yapı içinde sonraki çağırır - bu fetchData
bir koleksiyon almak olduğunu bilmeniz gerekmez, sadece alır zincirdeki üst bağdaştırıcısına bir başvuru. Yani, AbstractIFAdapter
başka bir AbstractIFAdapter
referansına sahip olur, hadi next
diyelim, ve eğer referans null değilse, kendi dataReceived
yöntemini çağırır. Her filtre ServletRequest
alır ve chain.doFilter(request,response)
çağrıları ServletFilter
s gibi benzer bir fikir.
Çok yardımcı yanıt. İhtiyaçlarım için değiştirilen ilk önerinizin bir sürümü ile sona erdi! – monoceres