Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
聚合器模式在Java中的实现_Java_Design Patterns_Aggregate - Fatal编程技术网

聚合器模式在Java中的实现

聚合器模式在Java中的实现,java,design-patterns,aggregate,Java,Design Patterns,Aggregate,[编辑]嗯,显然我问得不对。你能告诉我为什么这个问题不好吗 换言之,我想找出为什么要实现中定义的“纯对象聚合”,而不是“对象组织为blob” 我第一次尝试在Java中实现聚合模式 乍一看,界面似乎就是答案,当我需要属性的默认值时,我陷入了困惑。 因为常量是静态的,如果我在接口中定义了任何东西,它将与实现它的每个类共享。我想要的是,我只需要在需要不同于默认值的值的情况下实现它 在这里,抽象类似乎更合适,但我回到了多重继承问题上 以下是我能想到的(不可能的)骨架: public interface

[编辑]嗯,显然我问得不对。你能告诉我为什么这个问题不好吗

换言之,我想找出为什么要实现中定义的“纯对象聚合”,而不是“对象组织为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();
        }
    }
}
public interface menuitempoup{
//默认值
内窗高度=200;
int windowWidth=350;
公共空间开放();
公共空间设置窗高(int newHeight){
窗高=新高度;
}
公共void setWindowWidth(int newWidth){
窗口宽度=新宽度;
}
}
公共界面窗口按钮{
//默认值
点大小=新点(5120);
公共无效初始化();
公共无效设置大小(点新闻大小){
大小=新闻大小;
}
}
公共类SomeFuncGUI扩展了MandatoryParentClass实现了WindowButton、MenuItemPopup{
公开作废{
//做事
}
公共无效初始化(){
//多做事
}
}
公共类OtherFuncGUI扩展MandatoryParentClass实现MenuItemPopup{
公共用户界面(点自定义位置){
设置大小(新点(45,92));
}
公开作废{
//做事
}
}
公共类主类{
ArrayList=新的ArrayList();
添加(newsomefuncgui());
添加(新的OtherFuncGUI());
用于(MandatoryParentClass按钮:列表){
//进程按钮
如果(窗口按钮的按钮实例){
按钮打开();
}
//处理弹出窗口
if(菜单项菜单的按钮实例){
初始化()按钮;
}
}
}
我意识到这无法编译。

我将如何更改它以实现MenuItemPopup和WindowButton的聚合模式?

这里的答案是不使用继承。不需要继承windowButton,而是使其成为一个具体的类,并有一个类型为的字段。进行向下投票的原因是,这与这里的主题无关。实现问题属于StackOverflow。程序员负责概念/设计类问题。请花点时间阅读本网站的内容,以熟悉本网站的工作原理。非常抱歉,我想知道这一点。应该已经阅读了常见问题。将移动帖子。@kotoko理想情况下,不需要重新发布,而是允许那些有能力迁移它的人(这不是一个即时的过程)。