我有一个界面。为了这个问题,我会简化它:
interface EraseableColoredPencil {
//This method seems appropriate for an interface;
//The implementation will change with each class that implements this interface.
void draw();
//This method does not seem as appropriate;
//The implementation of the erase method would be the same for all classes.
void erase();
}
我的问题是:根据OOP原则,表达此内容的最佳方式是什么?两种方法的界面似乎都不合适。以下是我提出的选项:
EraseableColoredPencil
需要实现erase()
,这允许所有类共享相同的实施。我知道这是可能的,但我关心的是它是否遵循最佳实践。答案 0 :(得分:2)
其他内容:关注Interface Segregation Principle并拆分界面:
interface Drawer{
void draw();
}
interface Erasable {
void erase();
}
interface EraseableDrawer extends Drawer, Erasable {
}
现在您只需要依赖Drawer
或Erasable
,具体取决于您真正需要的方法(如果您需要,可以ErasableDrawer
)。
如果erase()
对于所有或大多数类实际上是相同的实现,您仍然可以使用实现AbstractErasableDrawer
的抽象类ErasableDrawer
,具体实现erase()
(或使用默认实现as suggested above)
答案 1 :(得分:1)
正如您现在刚才询问的那样,Java 8提供了第三种选择:{{3}}。
这允许您使用接口并定义erase
的默认行为,从而无需抽象类:
interface EraseableColoredPencil {
void draw();
default void erase() { ... }
}