用于消除开关条件的干净代码(使用多态性)
正如 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;
}
}
现在我想删除开关语句。所以我为它创建了一些类,并尝试在这里实现多态性:
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