2

这是我的问题:

我有一个巨大的类(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 !
    }

}

delegated1 函数所需的属性数量可能很大。所以我觉得使用LittleClass1的构造函数不是很方便。

而且因为 LittleClass1 只覆盖了 HugeClass 的一个方法,所以我认为 LittleClass1 不应该扩展 HugeClass。

你有解决方案的想法吗?使用另一种模式?

谢谢 !

更新

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

public class  LittleClass2
{
    public LittleClass2 ()
    {

    }

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

}

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

4

2 回答 2

7

将一个巨大的类分解成更小的类通常有助于提高代码的可维护性、可测试性和整体质量。较小的块应该更容易单独推理。您想要的是寻找巨大类的语义上不同的特征,并将它们分开,首先通过提取方法,然后通过提取类。您不一定要寻找一种模式,而是要寻找重构技术,例如RefactoringWorking Effectively with Legacy Code中的技术。

现在,如果你的小类似乎共享了大类的太多实例变量,也许你应该退后一步,从一些低垂的果实开始,比如不依赖太多变量的代码;或者尝试找到一组在语义上有意义的变量以封装在一个新对象中,什么会减少这些自由变量的数量并提高设计质量,因为在设计中找到潜在概念会使代码更多明确易懂。_

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

于 2012-06-16T23:48:28.283 回答
0

看起来您只需要LittleClass1子类HugeClass及其字段protected

public abstract class HugeClass {
    // Attributes - now protected instead of private
    protected Object object1;
    protected Object object2;
    protected Object object3;
    ...
    protected Object objectN;

    -- Note: No delegation, no reference to LittleClass1 here    

    public abstract void delegated ()

}

public class LittleClass1 extends HugeClass {

    public void delegated () {
        // Here, you have access to object1, object2 etc
    }
}
于 2012-06-17T00:05:02.800 回答