Как утверждают принципы SOLID, лучше удалить условия переключения, переведя их в классы и интерфейсы. Я хочу сделать это с помощью этого кода:
Примечание. Этот код не является реальным кодом, и я просто вкладываю в него свою идею.
MessageModel message = getMessageFromAnAPI();
manageMessage(message);
...
void manageMessage(MessageModel message){
switch(message.typeId) {
case 1: justSave(message); break;
case 2: notifyAll(message); break;
case 3: notify(message); break;
}
}
Теперь я хочу удалить оператор switch. Поэтому я создаю для него несколько классов, и я пытаюсь реализовать здесь полиморфизм:
interface Message{
void manageMessage(MessageModel message);
}
class StorableMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
justSave(message);
}
}
class PublicMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
notifyAll(message);
}
}
class PrivateMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
notify(message);
}
}
и затем я вызываю свой API для получения моего MessageModel
:
MessageModel message = getMessageFromAnAPI();
Теперь моя проблема здесь. У меня есть моя модель, и я хочу управлять ею, используя свои классы. Как примеры SOLID, я должен сделать что-то вроде этого:
PublicMessage message = new Message();
message.manageMessage(message);
Но как я могу узнать, какой тип связан с этим сообщением, чтобы сделать экземпляр из него (PublicMessage
или StorableMessage
или PrivateMessage
)?! Должен ли я снова включить блок блокировки, чтобы сделать это или что?