如何正确使用模块化的Java接口?
我正在尝试模块化遗留代码,在这样做的过程中,我遇到了以下问题: 我有两个属于同一个模块的类-以及许多其他类-每个类都有一个或多个用于其他地方的公共方法。我想为模块创建一个通用接口,但我不确定如何进行。如果我为模块创建一个接口,我将不得不在使用该接口的所有类中实现空白方法,这听起来不是很好。但是,如果我创建了多个接口,这些接口可以由模块中的特定类使用,那么我就只能将它们组合在一个接口中,而这个接口仅用于类型引用:如何正确使用模块化的Java接口?,java,inheritance,interface,module,Java,Inheritance,Interface,Module,我正在尝试模块化遗留代码,在这样做的过程中,我遇到了以下问题: 我有两个属于同一个模块的类-以及许多其他类-每个类都有一个或多个用于其他地方的公共方法。我想为模块创建一个通用接口,但我不确定如何进行。如果我为模块创建一个接口,我将不得不在使用该接口的所有类中实现空白方法,这听起来不是很好。但是,如果我创建了多个接口,这些接口可以由模块中的特定类使用,那么我就只能将它们组合在一个接口中,而这个接口仅用于类型引用: /-------------\ /-------------\ | Inte
/-------------\ /-------------\
| Interface A | | Interface B |
\-------------/ \-------------/
/-------------\ /-------------\
| Class A | | Class B |
\-------------/ \-------------/
/-------------\ /-------------\
| Interface A | | Interface B |
\-------------/ \-------------/
^ ^
| |
/------------------\
| Module Interface |
\------------------/
是否有任何设计模式可以帮助我实现这一点,或者将构成特定模块的接口组合到子接口中,以正确的方式表示模块类型以实现这一点?如果您创建一个公共接口,该接口的用户将期望其所有方法都能正常工作(除非文件中明确说明如何使用) 如果您最终不得不在接口级别指定复杂的规则来使用它,以便两个模块都能很好地工作,那么创建自定义接口并不是最好的主意 但是,如果两个模块中只有几个不同于另一个模块的方法,并且在调用时这些差异不会破坏模块,那么您可以创建一个自定义接口,然后提供每个模块接口的默认抽象实现,实际模块从该接口派生。抽象实现可以定义一个默认的抽象实现(例如,不执行任何操作)实现公共接口中的所有方法,因此具体的模块类不必专门实现它们
interface AIface {
void methodA();
}
interface BIface {
void methodB();
}
interface CommonIface extends AIface, BIface {
}
abstract class CommonAbstract implements CommonIface {
@Override
void methodA() {}
@Override
void methodB() {}
}
class ModuleA extends CommonAbstract {
@Override
void methodA() {
// A's implementation
}
}
class ModuleB extends CommonAbstract {
@Override
void methodB() {
// B's implementation
}
}
如果创建公共接口,该接口的用户将期望其所有方法都能工作(除非文档中明确说明如何使用) 如果您最终不得不在接口级别指定复杂的规则来使用它,以便两个模块都能很好地工作,那么创建自定义接口并不是最好的主意 但是,如果两个模块中只有几个不同于另一个模块的方法,并且在调用时这些差异不会破坏模块,那么您可以创建一个自定义接口,然后提供每个模块接口的默认抽象实现,实际模块从该接口派生。抽象实现可以定义一个默认的抽象实现(例如,不执行任何操作)实现公共接口中的所有方法,因此具体的模块类不必专门实现它们
interface AIface {
void methodA();
}
interface BIface {
void methodB();
}
interface CommonIface extends AIface, BIface {
}
abstract class CommonAbstract implements CommonIface {
@Override
void methodA() {}
@Override
void methodB() {}
}
class ModuleA extends CommonAbstract {
@Override
void methodA() {
// A's implementation
}
}
class ModuleB extends CommonAbstract {
@Override
void methodB() {
// B's implementation
}
}
我不确定我是否真的理解您的问题,但您可以通过继承将接口组合成一个接口。也就是说,接口支持多重继承 可能适用于您的模式是适配器模式:
也尝试不要为了制作它们而制造接口。java有着长期的历史,试图为那些永远不会有其他实现的东西制作接口。除非你制作一个API考虑了吻。hat接口支持多重继承
可能适用于您的模式是适配器模式:也尝试不要为制作它们而制造接口。java有着长期的历史,试图为那些永远不会有其他实现的东西制作接口。除非你制作一个API考虑了KISH。< /P>管他的模块是什么?你是说包,Maven子项目……?我是指模块的编程概念,这不是Java特有的东西。一般的想法是创建模块并对其进行接口,这样当我们想要更改模块的工作方式时,也就是说,为了提高效率,我们会替换接口下的代码,而接口之外的所有东西都会在不知道更改的情况下继续工作。模块到底是什么?你说的是pack吗年龄,maven子项目…?我指的是模块的编程概念,它不是Java特有的东西。一般的想法是创建模块并对其进行接口,这样当我们想要改变模块的工作方式时,也就是说,为了提高效率,我们会替换接口下的代码,而接口之外的一切都会在不知情的情况下工作改变的结果。