【问题标题】:Struggling to decide if a single-method interface is really a good idea in my case here?正在努力确定单方法接口在我的情况下是否真的是一个好主意?
【发布时间】:2016-08-30 09:23:58
【问题描述】:

所以我目前有一个接口Rentable,旨在由任何需要出租的对象实现,该对象具有三种方法:

boolean isRented();

void rent();

void terminateRental();

问题是,在实现此接口的类中,租用和终止租用实现对象的能力实际上应该是包私有的,但显然我在第一次编写我的类结构时没有意识到这一点。

一个单独的租赁管理器类提供公共方法来租用 Rentable 并将其与代表租用它的个人的另一个对象相关联,而这个类是唯一真正应该调用 rent 和 @987654325 的东西Rentable 对象本身中的 @ 方法。很明显,如果其他类可以公开操纵对象的租用状态而不将其与租用它的人分离,那就是个问题。

所以实际上这最后两个来自接口的方法应该是包私有的,所以显然它们需要从接口中出来,然后是拥有接口:

public interface Rentable {

    boolean isRented();

}

... 真的是一个好主意或好做法吗?我查找了单方法接口以及它们何时是一个好主意,但找不到与这种情况相关的太多内容。这对我来说似乎有点不对劲,尽管我认为它要求对象具有租用状态这一事实意味着需要编写更改它的方法,并且将来支持其他对象成为 Rentable 可能对我有好处(目前它只是汽车,但可能会租用其他类型的车辆或服务)。但我只是不确定这是多么好的做法,或者在我没有看到的这种情况下是否有某种替代方法?

【问题讨论】:

  • 有时情况需要零方法接口。在您的情况下,我会说单个方法接口是有保证的。您真正想要做的是能够安全地知道您面前的对象是可出租的,因此,恕我直言,您的界面是有保证的。
  • 如果接口是保证某些方法/属性的契约,那么单个方法接口可能是正确的。除非以更通用的方式实现您的接口的类需要其他任何东西。

标签: java oop interface access-modifiers


【解决方案1】:

单方法接口本质上没有任何问题(标准库包含一些,但可能相关,也可能不相关)。如果您需要实现向他们的客户保证的唯一事情是能够传达他们是否被租用,那么您提出的接口就可以了。

还要注意,接口不仅仅是它的方法:接口是真正的类型。如果你没有以这种方式使用这个接口——作为变量、方法参数和/或返回类型的声明类型或类型参数——那么你真的不会从中得到太多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多