java - 如何将不共享相同接口(interface)且不可修改的类分组?

标签 java design-patterns

我有几个遗留类,它们没有公共(public)接口(interface)或父类(super class),但具有相同的方法。大多数这些方法都受到保护。

无论如何,我想编写一个在这些类上始终执行相同例程的服务,从而始终调用相同的方法,无论它是什么类。

通常我会给这些类一个公共(public)接口(interface),但我无法修改遗留类,尽管我必须使用它们。

有机会将他们分组吗?也许是我不知道的设计模式?

class classA {
    protected String getData() {
        return "I'm class A";
    }
}

class classB {
    protected String getData() {
        return "I'm class B";
    }
}



class MyGeneralService {

    void execute(<ClassA or B> clazz) {
        //do something
        clazz.getData();
        //do something
        //call another methods that are common to both classes
    }
}

最佳答案

这听起来正是 Adapter Pattern 的问题类型。旨在解决。

本质上,用关联的适配器类包装每个遗留类,该类确实实现了一个公共(public)接口(interface)。适配器类应该简单地转发适当的方法调用。

注意:您想要从外部世界调用的方法受到保护这一事实很奇怪。适配器模式不会帮助您调用以前无法调用的方法(当然,除了通过反射)。

关于java - 如何将不共享相同接口(interface)且不可修改的类分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266536/

相关文章:

java - 服务层中的 hibernate/spring 验证

java - 在访问者模式中处理 null 的有效方法

java - 我可以调用位于另一个 jar 文件中的 jar 库中的类文件吗?

java - 将对象注入(inject) Jersey 资源

java - Wildfly 10 在启动时无法加载 MySQL XA 驱动程序

Java RegEx 在评估模式后无法获得结果

c# - 重构设计模式 : applying adapter pattern to 3rd party API

design-patterns - IRepository 和关系数据

c# - 您如何平衡框架/API 设计和 TDD

Java CRC32 与 MySQL CRC32 不匹配