在Java中实现聚合器模式

时间:2013-01-18 13:47:34

标签: java design-patterns aggregate

[edit] 嗯,显然我并没有正确地问这个问题。你能告诉我为什么这是一个糟糕的问题吗?

换句话说,我想找到一个原因,将this article中定义的内容实现为“纯对象聚合”而不是“将对象组织为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的聚合模式?

0 个答案:

没有答案