0

[编辑]嗯,显然我没有正确地问这个问题。你能告诉我为什么这是一个不好的问题吗?

换一种说法,我想找到一个为什么要实现本文中定义为“纯对象聚合”而不是“对象组织为 blob”的内容。

我第一次尝试在 Java 中实现聚合模式。

乍一看,接口似乎是答案,当我需要属性的默认值时,我遇到了困惑。
由于常量是静态的,如果我在接口中定义任何东西,它将与实现它的每个类共享。我想要的是,我只需要在我想要一个与默认值不同的值时才需要实现它。

在这里,抽象类似乎更合适,但我又回到了多重继承问题。

这是我可以使用的(不可能的)骨架:

public interface MenuItemPopup {
    // Defaults
    int windowHeight = 200;
    int windowWidth = 350;

    public void open();

    public void setWindowHeight(int newHeight){
        windowHeight = newHeight;
    }

    public void setWindowWidth(int newWidth){
        windowWidth = newWidth;
    }

}

public interface WindowButton {
    // Defaults
    Point size = new Point (5, 120);

    public void initialize();

    public void setSize(Point newSize){
        size = newSize;
    }
}

public class SomeFuncGUI extends MandatoryParentClass implements WindowButton, MenuItemPopup{

    public void open(){
        // do stuff
    }

    public void initialize(){
        // do more stuff
    }
}

public class OtherFuncGUI extends MandatoryParentClass implements MenuItemPopup{

    public OtherFuncGUI(Point customPosition){
        setSize(new Point(45, 92));
    }

    public void open(){
        // do stuff
    }
}

public class MainClass{
    ArrayList <MandatoryParentClass> list = new ArrayList <MandatoryParentClass>();
    list.add(new SomeFuncGUI());
    list.add(new OtherFuncGUI());

    for( MandatoryParentClass button : list){
        // process buttons
        if(button instanceof WindowButton){
            button.open();
        }
        // process popups
        if(button instanceof MenuItemPopup){
            button.initialize();
        }
    }
}

我意识到这不会编译。
我将如何更改它以实现 MenuItemPopup 和 WindowButton 的聚合模式?

4

0 回答 0