Я хочу расширить базовый класс в электронной почте Apache Commons, базовый класс - Email. Я просто хочу добавить регулирование в метод .send ()
. 3 других класса расширяют Email: HtmlEmail, SimpleEmail и MultiPartEmail
. Не существует фабричного метода для создания этих 3 производных классов.
Существует ли лучший способ, которым я могу расширить этот один метод из базового класса электронной почты? Все, что я могу придумать, - это расширить 3 производных класса, переопределить .send () в каждом и заставить каждый из них вызывать общий статический метод для выполнения функции регулирования .send ().
Похоже, вы можете использовать шаблон декоратора и написать, например, a ThrottledEmail
. Он просто украшает другой экземпляр Email
(это может быть подкласс ANY Email
) и может @Override
метод send
чтобы обеспечить некоторое дросселирование. Все остальные методы просто делегируются базовому экземпляру Email
.
Это похоже на то, как работает, например, java.io.BufferedReader
. Он может украсить любой Считыватель
, чтобы придать ему функцию буферизации. Другие примеры включают java.util.Collections
, который предоставляет служебные методы, такие как Collection
, который обертывает ANY Collection
и украшает его функциями синхронизации.
Если базовый класс четко не задокументирован для облегчения создания подклассов для @Override
определенных методов, вам обычно следует отдавать предпочтение композиции ( has-a ), а не наследованию ( is-a ) отношения.