genannt Ich habe diese Klasse:Sicherstellung Methode
public abstract class AbstractIncomingCall {
/*
class properties
*/
public void changeStatus(/*some parameters*/){
//store parameters in class properties
isValid();
}
protected abstract boolean isValid();
}
..., die von dieser Klasse erweitert:
public class IncomingCallImpl extends AbstractIncomingCall{
//I override the parent's method
public void changeStatus(/*same parameters as parent's method*/) {
super.changeStatus(/*same parameters as parent's method*/);
//do something interesting
}
protected boolean isValid() throws StatusChangeNotOccurredException {
//implement my validation algorithm
}
Was ich möchte, ist sicherzustellen, erreichen, dass immer dann, wenn Change (/ * einige Parameter * /) wird aufgerufen die isValid() Methode wird aufgerufen; Beachten Sie, dass die Methode isValid() nur in der konkreten Klasse implementiert ist und auch Klasseneigenschaften verwendet, die von der übergeordneten Klasse geerbt wurden. Gibt es eine Möglichkeit, die ich verfolgen kann, um sicherzustellen, dass isValid() anders als das Aufrufen von Super aufgerufen wird? Ich mag die Tatsache nicht, dass ich Parameter überall herumgeben muss, ich denke, dass ich völlig in die falsche Richtung gehe und es einen saubereren Weg gibt, dies zu erreichen. Was ich gerne in meinem Code behalten möchte, ist die "isValid() Aufruflogik" in der abstrakten Klasse, da jeder Aufruf validiert werden muss und ich mich nicht darauf verlassen kann, dass ich mich in Zukunft daran erinnere: P
Vielen Dank im Voraus:]
Fast posted die gleiche ... das ist ein sehr häufiges Muster. – Varkhan
Die Methode muss immer endgültig sein (nicht nur, wenn Menschen nicht darauf vertrauen, dass sie richtig erweitert werden). Template-Methode Muster impliziert die Methode ist endgültig, es ist der einzige Weg, um die Reihenfolge der Anrufe zu garantieren ... – pgras
"Der einzige Weg zu garantieren" klingt viel wie misstrauisch Extender :-) aber ja, ich stimme Ihnen zu, dass es ist die richtige Implementierung – kdgregory