У меня есть абстрактный класс «TopHandler». Существует два класса, которые расширяют TopHandler: «UserHandler» и «MerchantHandler».Java абстрактный класс - как я могу лучше всего это решить?
У меня есть метод sendMessage(), который я не уверен, где разместить. Один из вариантов, чтобы положить его в TopHandler и создать объект либо UserHandler или MerchantHandler, как это:
public abstract class TopHandler {
//Other methods...
public void sendMessage() {
TopHandler handler;
if (message.equalsIgnoreCase("User")) {
handler = new UserHandler();
//Call UserHandler implementation of abstract methods
} else {
handler = new MerchantHandler();
//Call MerchantHandler implementation of abstract methods
}
}
}
Мой другой вариант, чтобы сделать SendMessage() аннотацию и имеют оба класса реализовать, но это действительно создает некоторые дубликат/очень похожий код.
IMO ваша структура достаточно хороша ... возможно, вы хотите проверить [FactoryPattern] (http://www.tutorialspoint.com/design_pattern/factory_pattern.htm) –
зависит от того, нужны ли оба подкласса, и как это необходимо. shoudld это статично? зависит от экземпляра? зависит от типа ??? – Stultuske
Мне кажется странным, что 'TopHandler # sendMessage()' не является статическим, а используется для создания «TopHandler». Но у меня нет полного представления о вашем коде. Во всяком случае, другим решением может быть абстрактный метод TopHandler # createHandler(), который вернет правильный обработчик для каждого подкласса – jhamon