Как утверждают принципы 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)?! Должен ли я снова включить блок блокировки, чтобы сделать это или что?
