java - 如何用多态替换switch?

标签 java oop design-patterns enums polymorphism

我有 2 个应用程序:application_1application_2

application_1 发送不同类型的消息到application_2

有几种类型。我可以声明这些类型的枚举。

enum MessageType{
   TYPE_1,
   TYPE_2,
   ...
}

在我使用的 application_2 框架中,建议我编写以下 API

public void handle(Object o){
    //logic
}

我在考虑如何构建类来分别处理每条消息。

我知道我可以为所有消息声明通用类型:

abstract class AbstractMessage{
    MessageType type;
    Object o; 
    //...   
}

在句柄内的application_2中我可以这样写:

MessageType mt = ((AbstractMessage) o).getType();
  switch(mt){
     case TYPE_1: 
        //handle TYPE_1
        break;
     case TYPE_2: 
        //handle TYPE_2
        break;
        ....
  }

但是这段代码看起来很难看。

请帮助找到更好的解决方案。

最佳答案

如果你想使用多态性,你可以定义abstract 消息类:

abstract class AbstractMessage { 
    public abstract void doStuff();
    //...   
}

不使用枚举,而是为扩展抽象类并覆盖方法的每个消息类型创建一个类:

class Type1Message extends AbstractMessage {
    @Override
    public void doStuff() {
        //handle TYPE_1
    }
}

class Type2Message extends AbstractMessage {
    @Override
    public void doStuff() {
        //handle TYPE_2
    }
}

然后在您的handle 方法中:

((AbstractMessage) o).doStuff();

关于java - 如何用多态替换switch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459907/

相关文章:

java - OSB 代理从 AWS S3 检索内容 - java.lang.NoClassDefFoundError :com/amazonaws/services/s3/model/S3ObjectInputStream

c++ - 处理访问 NULL 指针

c++ - 顶级声明程序错误,但程序正常运行

python - 聊天服务器如何向多个客户端分发消息?

java - HttpServletRequest 到 MultipartHttpServletRequest : ClassCastException in Junit

java - 查看 Drag Helper 助手

java - 使用 ProcessBuilder 在 .java 文件中运行 shell 命令

java - 处理 - 有面向对象的编程问题

design-patterns - Symfony2 和 Controller 中的 DRY 方法

design-patterns - 消息设计模式