用很多方法实现接口=巨大的类。模式来拯救?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用很多方法实现接口=巨大的类。模式来拯救?相关的知识,希望对你有一定的参考价值。

我有一个有很多方法的接口。 (我不能分成不同的接口)

当我创建一个实现接口的类时,我在1个类文件中获得了很多方法。

当所有这些方法的主体变得更大时,事情变得更糟 - >类文件变得庞大并且很难导航。

即使是像eclipse一样的ide,因为包含所有类的Outline窗口都会得到一个垂直滚动条,因为并非所有方法都适合大纲。

有没有一种模式可以防止这种情况发生?

答案

我不太明白为什么你不能将界面分成多个...

我肯定会尝试使用继承,如:

第一个界面:

public interface FatherInterface 
    String methodOne(String var);

    String methodTwo(String var);

    String methodThree(String var);

第二界面:

public interface SonInterface extends FatherInterface 
    String methodFour(String var);

    String methodFive(String var);

第三界面:

public interface SecondSonInterface extends SonInterface 
    String methodSix(String var);

    String methodSeven(String var);

依此类推......每个接口都继承自前一个接口。

对于变大的类文件,也要继承。

父班:

public class Father implements FatherInterface

儿子班:

public class Son extends Father implements SonInterface

等等...


编辑

如果你不能分割界面(就像第三方给出的那样),我会按部分来实现方法的实现。也就是说,每个类中只实现了其中一些。如果需要,使用抽象类(或留下空白方法)。每个类继承自上面的内容并实现其余一些方法。

另一答案

我在接受答案后发布此答复,希望未来的人员可能会发现它有用。


正如simas_ch所说:

没有办法在许多类中拆分实现。但是您可以从实现类委托给任何其他类。这将减少实现中的代码,但方法的数量保持不变。


一旦我在一个相当庞大的应用程序上工作,我必须定义一个Lifecycle接口,其中包含许多状态和许多可能造成麻烦的函数,所以我带来了类似这样的东西:

您可以创建一个类并使其抽象化并实现大多数常用功能。

public interface TheBigFunctional 
    public void functionalA();
    public void functionalB();
    public void functionalC();
    //....
    public void functionalZ();


public abstract class FunctionalBase implements TheBigFunctional 
    public void functionalA() 
        aInternal();
    

    protected abstract void aInternal();

    // Rest of methods implementations.
    // You may choose to skip those if you want child classes to implement them.



public class FunctionalTypeFoo extends FunctionalBase 
    // Implementations.


public class FunctionalTypeBar extends FunctionalBase 
    // Implementations.


有很多(好的)方法可以解决这个问题,但我正在分享我的所作所为。

另一答案

没有办法在许多类中拆分实现。但是您可以从实现类委托给任何其他类。这将减少实现中的代码,但方法的数量保持不变。

另一答案

也许你可以通过从不同的类实现一些方法来在大接口上使用策略模式。然后,当您希望使用任何这些方法时,只需从实现“大”接口的类中调用它。

更多关于策略模式:https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

另一答案

在这种情况下,我会考虑你班上的所有方法是否设计得很好。可能他们没有明确的目的,应该按照少数人分开。您必须定义某些特定接口的明确目的。

此外,如果您使用的是Java 8,请考虑为某些方法提供一些默认实现。

另一答案

有没有一种模式可以防止这种情况发生?

在Java中:

  • Subtyping:如果您可以将方法组分组到不同的接口中,那么明确的层次关系是有意义的。这是接受的答案。
  • Interface Segregation:如果您可以将多组方法分组到不同的兄弟“域”或“类别”中。看看来自thisjcabi-github示例。了解Github如何成为此API的入口点,同时通过连续的“分组”接口公开不同的功能集。

以上是关于用很多方法实现接口=巨大的类。模式来拯救?的主要内容,如果未能解决你的问题,请参考以下文章

联想拯救者安装不了quicktime

联想拯救者15isk装固态硬盘需要把电池与主板连线那里拔下来吗?

联想拯救者R720 电源怎么显示已连接未充电

Mac安装ubuntu系统无法启动,进入grub的拯救方法

联想拯救者15-isk加啥固态

联想 拯救者 isk 15 的固态硬盘接口是什么,尺寸多少固态硬盘合适?