这是我的问题:

我有一个巨大的类(HugeClass),我想将其分为几个小类(LittleClass1,LittleClass2等)。我听说过代表团。听起来不错,但我认为这对我来说不起作用。
实际上,我的小班级需要一些HugeClass的属性:

public class  HugeClass
{
    // Attributes
    private Object object1;
    private Object object2;
    private Object object3;
    ...
    private Object objectN;

    // Delegation 1
    private LittleClass1  little1 = new LittleClass1 ();

    // Function delegated in the LittleClass1
    public void  delegated1 ()
    {
        little1.delegated1 ();
    }

}


这是一个委托类的例子:

public class  LittleClass1
{
    public LittleClass1 ()
    {

    }

    public void  delegated1 ()
    {
        // Here, I need object1, object3, and more to work !
    }

}


委托1函数所需的属性数量可能很大。因此,我认为使用LittleClass1的构造函数不是很方便。

而且由于LittleClass1仅覆盖HugeClass的一种方法,所以我认为LittleClass1不应该扩展HugeClass。

您有解决方案的想法吗?使用其他模式?

谢谢 !

更新资料

委托的函数可能不仅需要实例变量,还需要实例函数:

public class  LittleClass2
{
    public LittleClass2 ()
    {

    }

    public void  delegated2 ()
    {
        // I need object2 and delegated1 to work !
    }

}


将HugeClass提供给构造函数可能会解决此问题。但这是一个好的解决方案吗?

最佳答案

将庞大的类分成较小的类通常可以提高代码的可维护性,可测试性和整体质量。较小的块应该更容易被隔离。您想要的是查找巨大类的语义上不同的功能,然后首先通过提取方法,然后通过提取类将它们分开。您不一定要寻找一种模式,就像寻找重构技术一样,就像书籍Refactoring和Working Effectively with Legacy Code中的那些一样。

现在,如果您的小类似乎共享了巨大类的太多实例变量,那么也许您应该退后一步,从一些低沉的果实开始,例如不依赖太多变量的代码;或尝试找到在语义上有意义的变量组,以将其封装在新对象中,这将减少这些自由变量的数量并提高设计质量,因为在设计中查找潜在概念会使代码更加明确和可理解的。

更新:顺便说一句,继承确实不是一个好主意。您想使关注点分离,而继承只是耦合的另一种更微妙的方式。

10-08 13:25