0

我已经读过好几次了,例如在这里 https://stackoverflow.com/a/589885/1420898,静态成员是一个糟糕的 OO 设计,应该避免。它也发生在我正在从事的项目中;他们已经为在我看来应该是静态类的类使用了接口 + 实现,因为我们只是使用它的函数对其他类执行一些操作。

我的问题是,我们为什么要在静态类上使用接口?

4

2 回答 2

1

就使用静态类与接口而言,静态类将用作帮助器,即它将是该类的单个实例,而通过接口实例化的类可能有许多不同的实现,并且通常使用对于多个实例类。当您只想让一个类做某事而不存储特定于该调用的状态信息时,您可以使用静态类。接口将更多地用于一般的面向对象编程。

当我们希望在不实例化或创建对象的情况下使用对象时,基本上使用静态类。通常我们会在静态类中放置我们常用的函数或重复使用的此类函数。因为将它们放在简单的类中会产生很多开销,因为每次形成类对象时,它都会为我们在其中的所有对象分配内存。因此,它通过使用静态类来减少开销。

当与接口进行比较时,虽然没有这样的比较,这取决于您的要求,如果要求与上述类似,那么您肯定会选择静态类而不是接口,但是如果我们有这样的要求,即我们有多个类并且我们希望它们应该是遵循这样的模式或在它们的对象形成之前实现这些东西,那么我们会更喜欢接口而不是静态类。

此外,如果我的函数是通用的,但具有对应于不同类的不同实现,那么我将再次使用接口而不是静态类。

于 2012-10-02T09:26:25.067 回答
0

首先,我想说, java 中没有静态类。好吧,除了静态内部类。我认为内部阶级绝对不是你在上面的意思。

您可能想说,一个不允许实例化的类,使用静态方法。像 Util 类。即apache常见的StringUtil ...

Util 类中的静态方法只提供一种实现。更重要的是,它不应该对传入的 Object 了解太多详细的逻辑。

举个例子,你有界面:

    interface Animal{
   int totalLegs(); //here you get the animal object has how many legs 
}

那么你就有了 Bird、Horse、Warm、Fly 类,实现 Animal 接口。他们有不同的暗示。总腿数。这些实现与 Animal (Bird, Horse...) 类型的详细逻辑有关,因此它应该转到接口。

并假设每个动物都有一个字段 Date birthday;,您希望将日期转换为具有自定义模式的字符串。您可以创建一个类,即 DateUtil 和方法public static String getDateString(Date d, String pattern){...}

也许你可以描述一下接口/实现。在你的项目中。然后我们可以看看去Util类是否更好。

于 2012-10-02T10:00:43.050 回答