Ich möchte eine Basisklasse in Apache Commons E-Mail erweitern, die Basisklasse ist E-Mail. Ich möchte einfach eine Drosselung der .send () Methode hinzufügen
3 weitere Klassen erweitern Email: HtmlEmail, SimpleEmail und MultiPartEmail
Es gibt keine Factory-Methode zum Erstellen dieser 3 abgeleiteten Klassen.
Gibt es eine beste Möglichkeit, diese eine Methode aus der Basis-E-Mail-Klasse zu erweitern? Alles, was ich mir vorstellen kann, ist, die 3 abgeleiteten Klassen zu erweitern, in jedem das .send () zu überschreiben und jedes von ihnen eine gemeinsame statische Methode aufzurufen, um die .send () - Drosselungsfunktionalität zu erreichen.
Es sieht so aus, als könnten Sie das Dekorationsmuster verwenden und z. ein Code%. Es schmückt einfach eine andere Instanz von ThrottledEmail
(es kann ANY Email
Unterklasse sein) und es kann Email
die @Override
Methode, um eine Drosselung durchzusetzen. Alle anderen Methoden werden einfach an die zugrunde liegende send
-Instanz delegiert.
Dies ist ähnlich wie ein Email
funktioniert, beispielsweise. Es kann jedes java.io.BufferedReader
dekorieren, um ihm eine Pufferfunktion zu geben. Weitere Beispiele sind Reader
, die Hilfsmethoden wie java.util.Collections
, das umschließt < em> ANY Collection<T> synchronizedCollection(Collection<T>)
und dekoriert es mit Synchronisationsfunktionen.
Wenn die Basisklasse nicht eindeutig dokumentiert ist, um Unterklassen zu Collection<T>
bestimmten Methoden zu erleichtern, sollten Sie die Komposition ( has-a ) im Allgemeinen über die Vererbung ( is-a ) bevorzugen ) Beziehung.