Frage

Ich bin nicht sicher, ob ich das Muster der Vorlage-Methode richtig verstehe.

Hier ist meine vereinfachte Basisklasse-Implementierung: generasacodicetagpre.

Soweit ich es verstehe, kennt die Basisklasse den Algorithmusfluss und verwaltet es. Das Problem ist, dass ich in einem realen Projekt viele abstrakte Methoden habe, und es wäre schön, wenn ich irgendwie den direkten Anruf in abgeleiteten Klassen verhindern könnte.Es ist nicht lesbar, wenn mehr als eine Klasse den Algorithmusstrom verwaltet.

War es hilfreich?

Lösung

Ein Trick, der auf der ausdrücklichen Implementierung einer Schnittstelle basiert, kann verwendet werden, um versehentliche Aufträge der Methode zu verhindern, die von der Basisalgorith-Implementierung erfordert. Es ist jedoch eine solche Sicherheitsmaßnahme, die gebrochen werden kann, aber die Chancen sind hoch, dass der Entwickler wissen würde, was er tun würde.

Eine Schnittstelle deklarierende Methoden, die von AlgorithmMethod erforderlich sind: generasacodicetagpre.

Basis-abstrakte Klasse, die diese Schnittstelle verwendet, in seinen Konstruktor übergeben, um erforderliche Methoden anzurufen: generasacodicetagpre.

Dann verwendet die spezifische Algorithmusklasse, die von der generellen Schnittstelle erbt, explizite Schnittstellenimplementierung zur Einkapselung der erforderlichen Methoden (wie bei abstrakten Methoden in der Basis), während sie verhindern, dass sie versehentlich aufgerufen werden: generasacodicetagpre.

der Vorteil dieser Angeberung - neben der Verhinderung eines versehentlichen Aufrufs von Implementierungsmethoden - ist, dass Sie auswählen können, ob die Implementierung im Nachkomme einkapselt oder in eine separate Klasse zersetzt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top